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 3// rdar://11323187 4 5typedef unsigned long NSUInteger; 6 7typedef struct _NSRange { 8 NSUInteger location; 9 NSUInteger length; 10} NSRange; 11 12typedef struct { 13 NSUInteger _capacity; 14 NSRange _ranges[0]; 15} _NSRangeInfo; 16 17@interface Foo{ 18 @protected 19 struct _bar { 20 int x:1; 21 int y:1; 22 } bar; 23 union { 24 struct { 25 NSRange _range; 26 } _singleRange; 27 struct { 28 void * _data; 29 void *_reserved; 30 } _multipleRanges; 31 } _internal; 32} 33@end 34@implementation Foo 35- (void)x:(Foo *)other { 36 bar.x = 0; 37 bar.y = 1; 38 self->_internal._singleRange._range = (( other ->bar.x) ? &( other ->_internal._singleRange._range) : ((NSRange *)(&(((_NSRangeInfo *)( other ->_internal._multipleRanges._data))->_ranges))))[0]; 39} 40@end 41@interface FooS : Foo 42@end 43@implementation FooS 44- (void)y { 45 46 NSUInteger asdf = (( self ->bar.x) ? 1 : ((_NSRangeInfo *)( self ->_internal._multipleRanges._data))->_capacity ); 47} 48@end 49