// 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