xref: /aosp_15_r20/external/clang/test/CodeGenObjC/arc-ivar-layout.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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