3
3
// CHECK: @"OBJC_IVAR_$_StaticLayout.static_layout_ivar" = hidden constant i64 20
4
4
// CHECK: @"OBJC_IVAR_$_SuperClass.superClassIvar" = hidden constant i64 20
5
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
6
+ // CHECK: @"OBJC_IVAR_$_IntermediateClass.intermediateClassIvar" = constant i64 32
7
+ // CHECK: @"OBJC_IVAR_$_IntermediateClass.intermediateClassIvar2" = constant i64 40
8
+ // CHECK: @"OBJC_IVAR_$_IntermediateClass._intermediateProperty" = hidden constant i64 48
9
+ // CHECK: @"OBJC_IVAR_$_SubClass.subClassIvar" = constant i64 56
10
+ // CHECK: @"OBJC_IVAR_$_SubClass._subClassProperty" = hidden constant i64 64
11
11
// CHECK: @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar" = hidden global i64 12
12
12
13
13
@interface NSObject {
@@ -21,13 +21,15 @@ @interface StaticLayout : NSObject
21
21
@implementation StaticLayout {
22
22
int static_layout_ivar;
23
23
}
24
+
25
+ // CHECK-LABEL: define internal void @"\01-[StaticLayout meth]"
24
26
-(void )meth {
25
27
static_layout_ivar = 0 ;
26
28
// CHECK-NOT: load i64, ptr @"OBJC_IVAR_$_StaticLayout
29
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 20
27
30
}
28
31
@end
29
32
30
- // Ivars declared in the @interface
31
33
@interface SuperClass : NSObject
32
34
@property (nonatomic , assign ) int superClassProperty;
33
35
@end
@@ -40,21 +42,19 @@ @implementation SuperClass {
40
42
- (void )superClassMethod {
41
43
_superClassProperty = 42 ;
42
44
superClassIvar = 10 ;
43
- // CHECK: load i64, ptr @"OBJC_IVAR_$_SuperClass
45
+ // CHECK-NOT : load i64, ptr @"OBJC_IVAR_$_SuperClass
44
46
// CHECK: getelementptr inbounds i8, ptr %1, i64 20
45
47
}
46
48
47
- // implicitly synthesized method here
49
+ // Implicitly synthesized method here
48
50
// CHECK-LABEL: define internal i32 @"\01-[SuperClass superClassProperty]"
49
51
// CHECK: getelementptr inbounds i8, ptr %0, i64 24
50
52
51
53
// CHECK-LABEL: define internal void @"\01-[SuperClass setSuperClassProperty:]"
52
54
// CHECK: getelementptr inbounds i8, ptr %1, i64 24
53
55
@end
54
56
55
- // Inheritance and Ivars
56
- @interface IntermediateClass : SuperClass
57
- {
57
+ @interface IntermediateClass : SuperClass {
58
58
double intermediateClassIvar;
59
59
60
60
@protected
@@ -65,10 +65,12 @@ @interface IntermediateClass : SuperClass
65
65
66
66
@implementation IntermediateClass
67
67
@synthesize intermediateProperty = _intermediateProperty;
68
+
69
+ // CHECK-LABEL: define internal void @"\01-[IntermediateClass intermediateClassMethod]"
68
70
- (void )intermediateClassMethod {
69
71
intermediateClassIvar = 3.14 ;
70
- // CHECK: load i64, ptr @"OBJC_IVAR_$_IntermediateClass
71
- // CHECK: getelementptr inbounds i8, ptr %0, i64 %ivar
72
+ // CHECK-NOT : load i64, ptr @"OBJC_IVAR_$_IntermediateClass
73
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 32
72
74
}
73
75
74
76
// CHECK-LABEL: define internal void @"\01-[IntermediateClass intermediateClassPropertyMethod]"
@@ -81,39 +83,41 @@ - (void)intermediateClassPropertyMethod {
81
83
// CHECK-LABEL: define internal void @"\01-[IntermediateClass intermediateClassPropertyMethodDirect]"
82
84
- (void )intermediateClassPropertyMethodDirect {
83
85
_intermediateProperty = 0 ;
84
- // CHECK: load i64, ptr @"OBJC_IVAR_$_IntermediateClass._intermediateProperty"
86
+ // CHECK-NOT: load i64, ptr @"OBJC_IVAR_$_IntermediateClass._intermediateProperty"
87
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 48
85
88
}
86
89
@end
87
90
88
- @interface SubClass : IntermediateClass
89
- {
91
+ @interface SubClass : IntermediateClass {
90
92
double subClassIvar;
91
93
}
92
94
@property (nonatomic , assign ) SubClass *subClassProperty;
93
95
@end
94
96
95
97
@implementation SubClass
98
+
96
99
// CHECK-LABEL: define internal void @"\01-[SubClass subclassVar]"
97
100
- (void )subclassVar {
98
-
99
101
subClassIvar = 6.28 ;
100
- // CHECK: load i64, ptr @"OBJC_IVAR_$_SubClass
101
- // CHECK: getelementptr inbounds i8, ptr %0, i64 %ivar
102
+ // CHECK-NOT : load i64, ptr @"OBJC_IVAR_$_SubClass
103
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 56
102
104
}
103
105
104
106
// CHECK-LABEL: define internal void @"\01-[SubClass intermediateSubclassVar]"
105
107
-(void )intermediateSubclassVar {
106
108
intermediateClassIvar = 3.14 ;
107
- // CHECK: load i64, ptr @"OBJC_IVAR_$_IntermediateClass
108
- // CHECK: getelementptr inbounds i8, ptr %0, i64 %ivar
109
+ // CHECK-NOT : load i64, ptr @"OBJC_IVAR_$_IntermediateClass
110
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 32
109
111
}
110
112
111
- // implicit synthesized method here:
113
+ // Implicit synthesized method here:
112
114
// CHECK-LABEL: define internal ptr @"\01-[SubClass subClassProperty]"
113
- // CHECK: load i64, ptr @"OBJC_IVAR_$_SubClass._subClassProperty"
115
+ // CHECK-NOT: load i64, ptr @"OBJC_IVAR_$_SubClass._subClassProperty"
116
+ // CHECK: getelementptr inbounds i8, ptr %0, i64 64
114
117
115
118
// CHECK-LABEL: define internal void @"\01-[SubClass setSubClassProperty:]"
116
- // CHECK: load i64, ptr @"OBJC_IVAR_$_SubClass._subClassProperty"
119
+ // CHECK-NOT: load i64, ptr @"OBJC_IVAR_$_SubClass._subClassProperty"
120
+ // CHECK: getelementptr inbounds i8, ptr %1, i64 64
117
121
@end
118
122
119
123
@interface NotNSObject {
@@ -127,6 +131,8 @@ @interface NotStaticLayout : NotNSObject
127
131
@implementation NotStaticLayout {
128
132
int not_static_layout_ivar;
129
133
}
134
+
135
+ // CHECK-LABEL: define internal void @"\01-[NotStaticLayout meth]"
130
136
-(void )meth {
131
137
not_static_layout_ivar = 0 ;
132
138
// CHECK: load i64, ptr @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar
0 commit comments