1*67e74705SXin Li// RUN: %clang_cc1 -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -print-ivar-layout -emit-llvm %s -o %t-64.s | FileCheck -check-prefix CHECK-LP64 %s 2*67e74705SXin Li// rdar://8991729 3*67e74705SXin Li 4*67e74705SXin Li@interface NSObject { 5*67e74705SXin Li id isa; 6*67e74705SXin Li} 7*67e74705SXin Li@end 8*67e74705SXin Li 9*67e74705SXin Li@interface AllPointers : NSObject { 10*67e74705SXin Li id foo; 11*67e74705SXin Li id __strong bar; 12*67e74705SXin Li NSObject *bletch; 13*67e74705SXin Li} 14*67e74705SXin Li@end 15*67e74705SXin Li 16*67e74705SXin Li@implementation AllPointers 17*67e74705SXin Li@end 18*67e74705SXin Li// CHECK-LP64: strong ivar layout for class 'AllPointers': 0x03, 0x00 19*67e74705SXin Li 20*67e74705SXin Li@class NSString, NSNumber; 21*67e74705SXin Li@interface A : NSObject { 22*67e74705SXin Li NSString *foo; 23*67e74705SXin Li NSNumber *bar; 24*67e74705SXin Li unsigned int bletch; 25*67e74705SXin Li __weak id delegate; 26*67e74705SXin Li} 27*67e74705SXin Li@end 28*67e74705SXin Li 29*67e74705SXin Li@interface B : A { 30*67e74705SXin Li unsigned int x; 31*67e74705SXin Li NSString *y; 32*67e74705SXin Li NSString *z; 33*67e74705SXin Li} 34*67e74705SXin Li@end 35*67e74705SXin Li 36*67e74705SXin Li@implementation A @end 37*67e74705SXin Li 38*67e74705SXin Li// CHECK-LP64: strong ivar layout for class 'A': 0x02, 0x00 39*67e74705SXin Li// CHECK-LP64: weak ivar layout for class 'A': 0x31, 0x00 40*67e74705SXin Li 41*67e74705SXin Li@implementation B @end 42*67e74705SXin Li 43*67e74705SXin Li// CHECK-LP64: strong ivar layout for class 'B': 0x12, 0x00 44*67e74705SXin Li 45*67e74705SXin Li@interface UnsafePerson { 46*67e74705SXin Li@public 47*67e74705SXin Li __unsafe_unretained id name; 48*67e74705SXin Li __unsafe_unretained id age; 49*67e74705SXin Li id value; 50*67e74705SXin Li} 51*67e74705SXin Li@end 52*67e74705SXin Li 53*67e74705SXin Li@implementation UnsafePerson @end 54*67e74705SXin Li 55*67e74705SXin Li// CHECK-LP64: strong ivar layout for class 'UnsafePerson': 0x21, 0x00 56*67e74705SXin Li 57*67e74705SXin Li// rdar://16136439 58*67e74705SXin Li@interface rdar16136439 59*67e74705SXin Li @property (nonatomic, readonly, weak) id first; 60*67e74705SXin Li@end 61*67e74705SXin Li 62*67e74705SXin Li@implementation rdar16136439 @end 63*67e74705SXin Li 64*67e74705SXin Li// CHECK-LP64: weak ivar layout for class 'rdar16136439': 0x01, 0x00 65*67e74705SXin Li 66*67e74705SXin Li@interface Misalign : NSObject { 67*67e74705SXin Li char a; 68*67e74705SXin Li} 69*67e74705SXin Li@end 70*67e74705SXin Li 71*67e74705SXin Li@interface Misaligned : Misalign { 72*67e74705SXin Li char b; 73*67e74705SXin Li id x; 74*67e74705SXin Li} 75*67e74705SXin Li@end 76*67e74705SXin Li 77*67e74705SXin Li@implementation Misaligned @end 78*67e74705SXin Li 79*67e74705SXin Li// CHECK-LP64: strong ivar layout for class 'Misaligned': 0x01, 0x00 80