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