Skip to content

Commit 589d1da

Browse files
committed
[ObjC] Add pre-commit tests [NFC]
1 parent 1d2eced commit 589d1da

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -emit-llvm %s -o - | FileCheck %s
22

33
// 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
411
// CHECK: @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar" = hidden global i64 12
512

613
@interface NSObject {
@@ -20,6 +27,95 @@ -(void)meth {
2027
}
2128
@end
2229

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+
23119
@interface NotNSObject {
24120
int these, might, change;
25121
}

0 commit comments

Comments
 (0)