Revert "[llvm] Improve llvm.objectsize computation by computing GEP, alloca and mallo...
[llvm-project.git] / clang / test / Rewriter / rewrite-modern-struct-ivar-1.mm
blobff34ff5a8881b59e7b52aad7d04cb28be5fb9b06
1 // RUN: %clang_cc1 -fblocks -rewrite-objc -fms-extensions %s -o %t-rw.cpp
2 // RUN: %clang_cc1 -Werror -fsyntax-only -Wno-address-of-temporary -Wno-c++11-narrowing -std=c++11 -D"Class=void*" -D"id=void*" -D"SEL=void*" -U__declspec -D"__declspec(X)=" %t-rw.cpp
4 typedef unsigned long NSUInteger;
6 typedef struct _NSRange {
7     NSUInteger location;
8     NSUInteger length;
9 } NSRange;
11 typedef struct {
12     NSUInteger _capacity;
13     NSRange _ranges[0];
14 } _NSRangeInfo;
16 @interface Foo{
17     @protected 
18     struct _bar {
19         int x:1;
20         int y:1;
21     } bar;
22     union {
23         struct {
24             NSRange _range;
25         } _singleRange;
26         struct {
27             void *  _data;
28             void *_reserved;
29         } _multipleRanges;
30     } _internal;    
32 @end
33 @implementation Foo
34 - (void)x:(Foo *)other {
35   bar.x = 0;
36   bar.y = -1;
37   self->_internal._singleRange._range = (( other ->bar.x) ? &( other ->_internal._singleRange._range) : ((NSRange *)(&(((_NSRangeInfo *)( other ->_internal._multipleRanges._data))->_ranges))))[0];
39 @end
40 @interface FooS : Foo
41 @end
42 @implementation FooS
43 - (void)y {
45   NSUInteger asdf =  (( self ->bar.x) ? 1 : ((_NSRangeInfo *)( self ->_internal._multipleRanges._data))->_capacity ); 
47 @end