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