1
1
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -emit-llvm %s -o - | FileCheck %s
2
2
3
3
// CHECK: @"OBJC_IVAR_$_StaticLayout.static_layout_ivar" = hidden constant i64 20
4
+ // CHECK: @"OBJC_IVAR_$_SuperClass.superClassIvar" = hidden constant i64 20
5
+ // CHECK: @"OBJC_IVAR_$_SuperClass._superClassProperty" = hidden constant i64 24
6
+ // CHECK: @"OBJC_IVAR_$_IntermediateClass.intermediateClassIvar" = global i64 32
7
+ // CHECK: @"OBJC_IVAR_$_IntermediateClass.intermediateClassIvar2" = global i64 40
8
+ // CHECK: @"OBJC_IVAR_$_IntermediateClass._intermediateProperty" = hidden global i64 48
9
+ // CHECK: @"OBJC_IVAR_$_SubClass.subClassIvar" = global i64 56
10
+ // CHECK: @"OBJC_IVAR_$_SubClass._subClassProperty" = hidden global i64 64
4
11
// CHECK: @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar" = hidden global i64 12
5
12
6
13
@interface NSObject {
@@ -20,6 +27,95 @@ -(void)meth {
20
27
}
21
28
@end
22
29
30
+ // Ivars declared in the @interface
31
+ @interface SuperClass : NSObject
32
+ @property (nonatomic , assign ) int superClassProperty;
33
+ @end
34
+
35
+ @implementation SuperClass {
36
+ int superClassIvar; // Declare an ivar
37
+ }
38
+
39
+ // CHECK-LABEL: define internal void @"\01-[SuperClass superClassMethod]"
40
+ - (void )superClassMethod {
41
+ _superClassProperty = 42 ;
42
+ superClassIvar = 10 ;
43
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_SuperClass
44
+ // CHECK: getelementptr inbounds i8, ptr %1, i64 20
45
+ }
46
+
47
+ // implicitly synthesized method here
48
+ // CHECK-LABEL: define internal i32 @"\01-[SuperClass superClassProperty]"
49
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 24
50
+
51
+ // CHECK-LABEL: define internal void @"\01-[SuperClass setSuperClassProperty:]"
52
+ // CHECK: getelementptr inbounds i8, ptr %1, i64 24
53
+ @end
54
+
55
+ // Inheritance and Ivars
56
+ @interface IntermediateClass : SuperClass
57
+ {
58
+ double intermediateClassIvar;
59
+
60
+ @protected
61
+ int intermediateClassIvar2;
62
+ }
63
+ @property (nonatomic , strong ) SuperClass *intermediateProperty;
64
+ @end
65
+
66
+ @implementation IntermediateClass
67
+ @synthesize intermediateProperty = _intermediateProperty;
68
+ - (void )intermediateClassMethod {
69
+ intermediateClassIvar = 3.14 ;
70
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_IntermediateClass
71
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 %ivar
72
+ }
73
+
74
+ // CHECK-LABEL: define internal void @"\01-[IntermediateClass intermediateClassPropertyMethod]"
75
+ - (void )intermediateClassPropertyMethod {
76
+ self.intermediateProperty = 0 ;
77
+ // CHECK: load ptr, ptr @OBJC_SELECTOR_REFERENCES_
78
+ // CHECK: call void @objc_msgSend(ptr noundef %0, ptr noundef %1, ptr noundef null)
79
+ }
80
+
81
+ // CHECK-LABEL: define internal void @"\01-[IntermediateClass intermediateClassPropertyMethodDirect]"
82
+ - (void )intermediateClassPropertyMethodDirect {
83
+ _intermediateProperty = 0 ;
84
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_IntermediateClass._intermediateProperty"
85
+ }
86
+ @end
87
+
88
+ @interface SubClass : IntermediateClass
89
+ {
90
+ double subClassIvar;
91
+ }
92
+ @property (nonatomic , assign ) SubClass *subClassProperty;
93
+ @end
94
+
95
+ @implementation SubClass
96
+ // CHECK-LABEL: define internal void @"\01-[SubClass subclassVar]"
97
+ - (void )subclassVar {
98
+
99
+ subClassIvar = 6.28 ;
100
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_SubClass
101
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 %ivar
102
+ }
103
+
104
+ // CHECK-LABEL: define internal void @"\01-[SubClass intermediateSubclassVar]"
105
+ -(void )intermediateSubclassVar {
106
+ intermediateClassIvar = 3.14 ;
107
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_IntermediateClass
108
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 %ivar
109
+ }
110
+
111
+ // implicit synthesized method here:
112
+ // CHECK-LABEL: define internal ptr @"\01-[SubClass subClassProperty]"
113
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_SubClass._subClassProperty"
114
+
115
+ // CHECK-LABEL: define internal void @"\01-[SubClass setSubClassProperty:]"
116
+ // CHECK: load i64, ptr @"OBJC_IVAR_$_SubClass._subClassProperty"
117
+ @end
118
+
23
119
@interface NotNSObject {
24
120
int these, might, change;
25
121
}
0 commit comments