| // RUN: %clang_cc1 -fblocks -rewrite-objc -fms-extensions %s -o %t-rw.cpp |
| // 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 |
| // rdar://11323187 |
| |
| typedef unsigned long NSUInteger; |
| |
| typedef struct _NSRange { |
| NSUInteger location; |
| NSUInteger length; |
| } NSRange; |
| |
| typedef struct { |
| NSUInteger _capacity; |
| NSRange _ranges[0]; |
| } _NSRangeInfo; |
| |
| @interface Foo{ |
| @protected |
| struct _bar { |
| int x:1; |
| int y:1; |
| } bar; |
| union { |
| struct { |
| NSRange _range; |
| } _singleRange; |
| struct { |
| void * _data; |
| void *_reserved; |
| } _multipleRanges; |
| } _internal; |
| } |
| @end |
| @implementation Foo |
| - (void)x:(Foo *)other { |
| bar.x = 0; |
| bar.y = 1; |
| self->_internal._singleRange._range = (( other ->bar.x) ? &( other ->_internal._singleRange._range) : ((NSRange *)(&(((_NSRangeInfo *)( other ->_internal._multipleRanges._data))->_ranges))))[0]; |
| } |
| @end |
| @interface FooS : Foo |
| @end |
| @implementation FooS |
| - (void)y { |
| |
| NSUInteger asdf = (( self ->bar.x) ? 1 : ((_NSRangeInfo *)( self ->_internal._multipleRanges._data))->_capacity ); |
| } |
| @end |