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