| // RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fms-extensions -rewrite-objc %s -o %t-modern-rw.cpp |
| // 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 |
| // rdar://13138459 |
| |
| // -Did="void*" -DSEL="void *" -DClass="void*" |
| @interface NSMutableArray { |
| id isa; |
| } |
| @end |
| |
| typedef unsigned char BOOL; |
| typedef unsigned long NSUInteger; |
| |
| __attribute__((visibility("hidden"))) |
| @interface __NSArrayM : NSMutableArray { |
| NSUInteger _used; |
| NSUInteger _doHardRetain:1; |
| NSUInteger _doWeakAccess:1; |
| #if __LP64__ |
| NSUInteger _size:62; |
| #else |
| NSUInteger _size:30; |
| #endif |
| NSUInteger _hasObjects:1; |
| NSUInteger _hasStrongReferences:1; |
| #if __LP64__ |
| NSUInteger _offset:62; |
| #else |
| NSUInteger _offset:30; |
| #endif |
| unsigned long _mutations; |
| id *_list; |
| } |
| @end |
| |
| |
| id __CFAllocateObject2(); |
| BOOL objc_collectingEnabled(); |
| |
| @implementation __NSArrayM |
| + (id)__new:(const id [])objects :(NSUInteger)count :(BOOL)hasObjects :(BOOL)hasStrong :(BOOL)transferRetain { |
| __NSArrayM *newArray = (__NSArrayM *)__CFAllocateObject2(); |
| newArray->_size = count; |
| newArray->_mutations = 1; |
| newArray->_doHardRetain = (hasObjects && hasStrong); |
| newArray->_doWeakAccess = (objc_collectingEnabled() && !hasStrong); |
| newArray->_hasObjects = hasObjects; |
| newArray->_hasStrongReferences = hasStrong; |
| newArray->_list = 0; |
| return *newArray->_list; |
| } |
| @end |
| |
| // Test2 |
| @interface Super { |
| int ivar_super_a : 5; |
| } |
| @end |
| |
| @interface A : Super { |
| @public |
| int ivar_a : 5; |
| } |
| @end |
| |
| int f0(A *a) { |
| return a->ivar_a; |
| } |
| |
| @interface A () { |
| @public |
| int ivar_ext_a : 5; |
| int ivar_ext_b : 5; |
| }@end |
| |
| int f1(A *a) { |
| return a->ivar_ext_a + a->ivar_a; |
| } |
| |
| @interface A () { |
| @public |
| int ivar_ext2_a : 5; |
| int ivar_ext2_b : 5; |
| }@end |
| |
| int f2(A* a) { |
| return a->ivar_ext2_a + a->ivar_ext_a + a->ivar_a; |
| } |
| |
| @implementation A { |
| @public |
| int ivar_b : 5; |
| int ivar_c : 5; |
| int ivar_d : 5; |
| } |
| @end |
| |
| int f3(A *a) { |
| return a->ivar_d + a->ivar_ext2_a + a->ivar_ext_a + a->ivar_a; |
| } |
| |
| __attribute__((objc_root_class)) @interface Base |
| { |
| struct objc_class *isa; |
| int full; |
| int full2: 32; |
| int _refs: 8; |
| int field2: 3; |
| unsigned f3: 8; |
| short cc; |
| unsigned g: 16; |
| int r2: 8; |
| int r3: 8; |
| int r4: 2; |
| int r5: 8; |
| char c; |
| } |
| @end |
| |
| @implementation Base @end |