48 lines · plain
1// RUN: %clang_cc1 -fblocks -rewrite-objc -fms-extensions %s -o %t-rw.cpp2// 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.cpp3 4typedef unsigned long NSUInteger;5 6typedef struct _NSRange {7 NSUInteger location;8 NSUInteger length;9} NSRange;10 11typedef struct {12 NSUInteger _capacity;13 NSRange _ranges[0];14} _NSRangeInfo;15 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; 31}32@end33@implementation Foo34- (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];38}39@end40@interface FooS : Foo41@end42@implementation FooS43- (void)y {44 45 NSUInteger asdf = (( self ->bar.x) ? 1 : ((_NSRangeInfo *)( self ->_internal._multipleRanges._data))->_capacity ); 46}47@end48