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