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