Skip to content

Commit 60d82c7

Browse files
authored
Merge pull request #66810 from aschwaighofer/fix_class_resilience_objc_armv7k_opaque_ptr
Fix test/IRGen/class_resilience_objc_armv7k.swift for opaque pointers
2 parents b8a4132 + 5cb1d4d commit 60d82c7

File tree

1 file changed

+18
-27
lines changed

1 file changed

+18
-27
lines changed

test/IRGen/class_resilience_objc_armv7k.swift

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ public class FixedLayoutObjCSubclass : NSObject {
1212
public final var field: Int32 = 0
1313
};
1414

15-
// CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k29testConstantDirectFieldAccessyyAA23FixedLayoutObjCSubclassCF"(%T28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC* %0)
16-
// CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC5fields5Int32VvpWvd"
17-
// CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC* %0 to i8*
18-
// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[OFFSET]]
19-
// CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V*
15+
// CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k29testConstantDirectFieldAccessyyAA23FixedLayoutObjCSubclassCF"(ptr %0)
16+
// CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC5fields5Int32VvpWvd"
17+
// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
2018
// CHECK: call void @swift_beginAccess
21-
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR]], i32 0, i32 0
22-
// CHECK-NEXT: store i32 10, i32* [[PAYLOAD_ADDR]]
19+
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR]], i32 0, i32 0
20+
// CHECK-NEXT: store i32 10, ptr [[PAYLOAD_ADDR]]
2321

2422
func testConstantDirectFieldAccess(_ o: FixedLayoutObjCSubclass) {
2523
o.field = 10
@@ -31,14 +29,12 @@ public class NonFixedLayoutObjCSubclass : NSCoder {
3129
public final var field: Int32 = 0
3230
}
3331

34-
// CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k32testNonConstantDirectFieldAccessyyAA0F23FixedLayoutObjCSubclassCF"(%T28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC* %0)
35-
// CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC5fields5Int32VvpWvd"
36-
// CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC* %0 to i8*
37-
// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[OFFSET]]
38-
// CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V*
32+
// CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k32testNonConstantDirectFieldAccessyyAA0F23FixedLayoutObjCSubclassCF"(ptr %0)
33+
// CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC5fields5Int32VvpWvd"
34+
// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
3935
// CHECK: call void @swift_beginAccess
40-
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR]], i32 0, i32 0
41-
// CHECK-NEXT: store i32 10, i32* [[PAYLOAD_ADDR]]
36+
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR]], i32 0, i32 0
37+
// CHECK-NEXT: store i32 10, ptr [[PAYLOAD_ADDR]]
4238

4339
func testNonConstantDirectFieldAccess(_ o: NonFixedLayoutObjCSubclass) {
4440
o.field = 10
@@ -53,24 +49,19 @@ public class GenericObjCSubclass<T> : NSCoder {
5349
}
5450
}
5551

56-
// CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k31testConstantIndirectFieldAccessyyAA19GenericObjCSubclassCyxGlF"(%T28class_resilience_objc_armv7k19GenericObjCSubclassC* %0)
52+
// CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k31testConstantIndirectFieldAccessyyAA19GenericObjCSubclassCyxGlF"(ptr %0)
5753

5854
// FIXME: we could eliminate the unnecessary isa load by lazily emitting
5955
// metadata sources in EmitPolymorphicParameters
6056

61-
// CHECK: call %objc_class* @object_getClass
62-
// CHECK: [[ADDR:%.*]] = bitcast %T28class_resilience_objc_armv7k19GenericObjCSubclassC* %0 to %objc_object*
63-
// CHECK-NEXT: [[KLASS:%.*]] = call %objc_class* @object_getClass(%objc_object* [[ADDR]])
64-
// CHECK-NEXT: [[ISA:%.*]] = bitcast %objc_class* [[KLASS]] to %swift.type*
65-
// CHECK-NEXT: [[ISA_ADDR:%.*]] = bitcast %swift.type* [[ISA]] to [[INT]]*
66-
// CHECK-NEXT: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[ISA_ADDR]], [[INT]] 15
67-
// CHECK-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_ADDR:%.*]]
68-
// CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T28class_resilience_objc_armv7k19GenericObjCSubclassC* %0 to i8*
69-
// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[FIELD_OFFSET]]
70-
// CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V*
57+
// CHECK: call ptr @object_getClass
58+
// CHECK: [[KLASS:%.*]] = call ptr @object_getClass(ptr %0)
59+
// CHECK-NEXT: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds [[INT]], ptr [[KLASS]], [[INT]] 15
60+
// CHECK-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr [[FIELD_OFFSET_ADDR:%.*]]
61+
// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[FIELD_OFFSET]]
7162
// CHECK: call void @swift_beginAccess
72-
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR]], i32 0, i32 0
73-
// CHECK-NEXT: store i32 10, i32* [[PAYLOAD_ADDR]]
63+
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR]], i32 0, i32 0
64+
// CHECK-NEXT: store i32 10, ptr [[PAYLOAD_ADDR]]
7465

7566
func testConstantIndirectFieldAccess<T>(_ o: GenericObjCSubclass<T>) {
7667
// This field uses constant indirect access because NSCoder has resilient

0 commit comments

Comments
 (0)