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