1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fms-extensions -rewrite-objc %s -o %t-modern-rw.cpp 2*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-modern-rw.cpp 3*67e74705SXin Li// rdar://13138459 4*67e74705SXin Li 5*67e74705SXin Li// -Did="void*" -DSEL="void *" -DClass="void*" 6*67e74705SXin Li@interface NSMutableArray { 7*67e74705SXin Li id isa; 8*67e74705SXin Li} 9*67e74705SXin Li@end 10*67e74705SXin Li 11*67e74705SXin Litypedef unsigned char BOOL; 12*67e74705SXin Litypedef unsigned long NSUInteger; 13*67e74705SXin Li 14*67e74705SXin Li__attribute__((visibility("hidden"))) 15*67e74705SXin Li@interface __NSArrayM : NSMutableArray { 16*67e74705SXin Li NSUInteger _used; 17*67e74705SXin Li NSUInteger _doHardRetain:1; 18*67e74705SXin Li NSUInteger _doWeakAccess:1; 19*67e74705SXin Li#if __LP64__ 20*67e74705SXin Li NSUInteger _size:62; 21*67e74705SXin Li#else 22*67e74705SXin Li NSUInteger _size:30; 23*67e74705SXin Li#endif 24*67e74705SXin Li NSUInteger _hasObjects:1; 25*67e74705SXin Li NSUInteger _hasStrongReferences:1; 26*67e74705SXin Li#if __LP64__ 27*67e74705SXin Li NSUInteger _offset:62; 28*67e74705SXin Li#else 29*67e74705SXin Li NSUInteger _offset:30; 30*67e74705SXin Li#endif 31*67e74705SXin Li unsigned long _mutations; 32*67e74705SXin Li id *_list; 33*67e74705SXin Li} 34*67e74705SXin Li@end 35*67e74705SXin Li 36*67e74705SXin Li 37*67e74705SXin Liid __CFAllocateObject2(); 38*67e74705SXin LiBOOL objc_collectingEnabled(); 39*67e74705SXin Li 40*67e74705SXin Li@implementation __NSArrayM 41*67e74705SXin Li+ (id)__new:(const id [])objects :(NSUInteger)count :(BOOL)hasObjects :(BOOL)hasStrong :(BOOL)transferRetain { 42*67e74705SXin Li __NSArrayM *newArray = (__NSArrayM *)__CFAllocateObject2(); 43*67e74705SXin Li newArray->_size = count; 44*67e74705SXin Li newArray->_mutations = 1; 45*67e74705SXin Li newArray->_doHardRetain = (hasObjects && hasStrong); 46*67e74705SXin Li newArray->_doWeakAccess = (objc_collectingEnabled() && !hasStrong); 47*67e74705SXin Li newArray->_hasObjects = hasObjects; 48*67e74705SXin Li newArray->_hasStrongReferences = hasStrong; 49*67e74705SXin Li newArray->_list = 0; 50*67e74705SXin Li return *newArray->_list; 51*67e74705SXin Li} 52*67e74705SXin Li@end 53*67e74705SXin Li 54*67e74705SXin Li// Test2 55*67e74705SXin Li@interface Super { 56*67e74705SXin Li int ivar_super_a : 5; 57*67e74705SXin Li} 58*67e74705SXin Li@end 59*67e74705SXin Li 60*67e74705SXin Li@interface A : Super { 61*67e74705SXin Li@public 62*67e74705SXin Li int ivar_a : 5; 63*67e74705SXin Li} 64*67e74705SXin Li@end 65*67e74705SXin Li 66*67e74705SXin Liint f0(A *a) { 67*67e74705SXin Li return a->ivar_a; 68*67e74705SXin Li} 69*67e74705SXin Li 70*67e74705SXin Li@interface A () { 71*67e74705SXin Li@public 72*67e74705SXin Li int ivar_ext_a : 5; 73*67e74705SXin Li int ivar_ext_b : 5; 74*67e74705SXin Li}@end 75*67e74705SXin Li 76*67e74705SXin Liint f1(A *a) { 77*67e74705SXin Li return a->ivar_ext_a + a->ivar_a; 78*67e74705SXin Li} 79*67e74705SXin Li 80*67e74705SXin Li@interface A () { 81*67e74705SXin Li@public 82*67e74705SXin Li int ivar_ext2_a : 5; 83*67e74705SXin Li int ivar_ext2_b : 5; 84*67e74705SXin Li}@end 85*67e74705SXin Li 86*67e74705SXin Liint f2(A* a) { 87*67e74705SXin Li return a->ivar_ext2_a + a->ivar_ext_a + a->ivar_a; 88*67e74705SXin Li} 89*67e74705SXin Li 90*67e74705SXin Li@implementation A { 91*67e74705SXin Li@public 92*67e74705SXin Li int ivar_b : 5; 93*67e74705SXin Li int ivar_c : 5; 94*67e74705SXin Li int ivar_d : 5; 95*67e74705SXin Li} 96*67e74705SXin Li@end 97*67e74705SXin Li 98*67e74705SXin Liint f3(A *a) { 99*67e74705SXin Li return a->ivar_d + a->ivar_ext2_a + a->ivar_ext_a + a->ivar_a; 100*67e74705SXin Li} 101*67e74705SXin Li 102*67e74705SXin Li__attribute__((objc_root_class)) @interface Base 103*67e74705SXin Li{ 104*67e74705SXin Li struct objc_class *isa; 105*67e74705SXin Li int full; 106*67e74705SXin Li int full2: 32; 107*67e74705SXin Li int _refs: 8; 108*67e74705SXin Li int field2: 3; 109*67e74705SXin Li unsigned f3: 8; 110*67e74705SXin Li short cc; 111*67e74705SXin Li unsigned g: 16; 112*67e74705SXin Li int r2: 8; 113*67e74705SXin Li int r3: 8; 114*67e74705SXin Li int r4: 2; 115*67e74705SXin Li int r5: 8; 116*67e74705SXin Li char c; 117*67e74705SXin Li} 118*67e74705SXin Li@end 119*67e74705SXin Li 120*67e74705SXin Li@implementation Base @end 121