1
1
// RUN: %empty-directory(%t)
2
- // RUN: %target-swift-frontend -emit-module -o %t/UsingObjCStuff.swiftmodule -module-name UsingObjCStuff -I %t -I %S/Inputs/mixed_mode -swift-version 4 %S/Inputs/mixed_mode/UsingObjCStuff.swift
3
- // RUN: %target-swift-frontend -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 3 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-V3
4
- // RUN: %target-swift-frontend -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-V4
2
+ // RUN: %target-swift-frontend -emit-module -o %t/UsingObjCStuff.swiftmodule -module-name UsingObjCStuff -I %t -I %S/Inputs/mixed_mode -swift-version 5 %S/Inputs/mixed_mode/UsingObjCStuff.swift
3
+ // RUN: %target-swift-frontend -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-V4 -DWORD=i%target-ptrsize
4
+ // RUN: %target-swift-frontend -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 5 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-V5 -DWORD=i%target-ptrsize
5
5
6
6
// REQUIRES: objc_interop
7
7
8
8
import UsingObjCStuff
9
9
10
10
public class SubButtHolder : ButtHolder {
11
- final var w : Double = 0
11
+ final var w : Float = 0
12
12
13
13
override public func virtual( ) { }
14
14
@@ -20,39 +20,64 @@ public class SubSubButtHolder: SubButtHolder {
20
20
public override func subVirtual( ) { }
21
21
}
22
22
23
- // CHECK-LABEL: define {{.*}} @{{.*}}accessFinalFields
23
+ // CHECK-LABEL: define {{(protected )?}}{{(dllexport )?}}swiftcc void @"$S4main17accessFinalFields2ofyp_ypt14UsingObjCStuff10ButtHolderC_tF"
24
24
public func accessFinalFields( of holder: ButtHolder ) -> ( Any , Any ) {
25
- // x and z came from the other module, so we should use their accessors.
26
- // CHECK: [[OFFSET:%.*]] = load [[WORD:i[0-9]+]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1xSivpWvd"
27
- // CHECK: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
28
- // CHECK: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
29
-
30
- // CHECK: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1zSSvpWvd"
31
- // CHECK: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
32
- // CHECK: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
25
+
26
+ // ButtHolder.y cannot be imported in Swift 4 mode, so make sure we use field
27
+ // offset globals here.
28
+
29
+ // CHECK-V4: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1xSivpWvd"
30
+ // CHECK-V4: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
31
+ // CHECK-V4: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
32
+
33
+ // CHECK-V4: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1zSSvpWvd"
34
+ // CHECK-V4: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
35
+ // CHECK-V4: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
36
+
37
+ // ButtHolder.y is correctly imported in Swift 5 mode, so we can use fixed offsets.
38
+
39
+ // CHECK-V5: [[OFFSET:%.*]] = getelementptr inbounds %T14UsingObjCStuff10ButtHolderC, %T14UsingObjCStuff10ButtHolderC* %2, i32 0, i32 1
40
+
41
+ // CHECK-V5: [[OFFSET:%.*]] = getelementptr inbounds %T14UsingObjCStuff10ButtHolderC, %T14UsingObjCStuff10ButtHolderC* %2, i32 0, i32 3
42
+
33
43
return ( holder. x, holder. z)
34
44
}
35
45
36
- // CHECK-LABEL: define {{.*}} @{{.*}}accessFinalFields
46
+ // CHECK-LABEL: define {{(protected )?}}{{(dllexport )?}}swiftcc void @"$S4main17accessFinalFields5ofSubyp_ypyptAA0F10ButtHolderC_tF"
37
47
public func accessFinalFields( ofSub holder: SubButtHolder ) -> ( Any , Any , Any ) {
38
48
// We should use the runtime-adjusted ivar offsets since we may not have
39
49
// a full picture of the layout in mixed Swift language version modes.
40
- // CHECK: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1xSivpWvd"
41
- // CHECK: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
42
- // CHECK: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
43
50
44
- // CHECK: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1zSSvpWvd"
45
- // CHECK: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
46
- // CHECK: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
51
+ // ButtHolder.y cannot be imported in Swift 4 mode, so make sure we use field
52
+ // offset globals here.
53
+
54
+ // CHECK-V4: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1xSivpWvd"
55
+ // CHECK-V4: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
56
+ // CHECK-V4: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
57
+
58
+ // CHECK-V4: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S14UsingObjCStuff10ButtHolderC1zSSvpWvd"
59
+ // CHECK-V4: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
60
+ // CHECK-V4: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
61
+
62
+ // CHECK-V4: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S4main13SubButtHolderC1wSfvpWvd"
63
+
64
+ // CHECK-V4: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
65
+ // CHECK-V4: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
66
+
67
+ // ButtHolder.y is correctly imported in Swift 5 mode, so we can use fixed offsets.
68
+
69
+ // CHECK-V5: [[SELF:%.*]] = bitcast %T4main13SubButtHolderC* %3 to %T14UsingObjCStuff10ButtHolderC*
70
+ // CHECK-V5: [[OFFSET:%.*]] = getelementptr inbounds %T14UsingObjCStuff10ButtHolderC, %T14UsingObjCStuff10ButtHolderC* [[SELF]], i32 0, i32 1
71
+
72
+ // CHECK-V5: [[SELF:%.*]] = bitcast %T4main13SubButtHolderC* %3 to %T14UsingObjCStuff10ButtHolderC*
73
+ // CHECK-V5: [[OFFSET:%.*]] = getelementptr inbounds %T14UsingObjCStuff10ButtHolderC, %T14UsingObjCStuff10ButtHolderC* [[SELF]], i32 0, i32 3
47
74
48
- // CHECK: [[OFFSET:%.*]] = load [[WORD]], [[WORD]]* @"$S4main13SubButtHolderC1wSdvpWvd"
75
+ // CHECK-V5 : [[OFFSET:%.*]] = getelementptr inbounds %T4main13SubButtHolderC, %T4main13SubButtHolderC* %3, i32 0, i32 4
49
76
50
- // CHECK: [[INSTANCE_RAW:%.*]] = bitcast {{.*}} to i8*
51
- // CHECK: getelementptr inbounds i8, i8* [[INSTANCE_RAW]], [[WORD]] [[OFFSET]]
52
77
return ( holder. x, holder. z, holder. w)
53
78
}
54
79
55
- // CHECK-LABEL: define {{.*}} @{{.*}}invokeMethod
80
+ // CHECK-LABEL: define {{(protected )?}}{{(dllexport )?}}swiftcc void @"$S4main12invokeMethod2onyAA13SubButtHolderC_tF"
56
81
public func invokeMethod( on holder: SubButtHolder ) {
57
82
// CHECK-64: [[IMPL_ADDR:%.*]] = getelementptr inbounds {{.*}}, [[WORD]] 10
58
83
// CHECK-32: [[IMPL_ADDR:%.*]] = getelementptr inbounds {{.*}}, [[WORD]] 13
@@ -66,9 +91,9 @@ public func invokeMethod(on holder: SubButtHolder) {
66
91
holder. subVirtual ( )
67
92
}
68
93
69
- // CHECK-V3 -LABEL: define private void @initialize_metadata_SubButtHolder
70
- // CHECK-V3 : call void @swift_initClassMetadata(
94
+ // CHECK-V4 -LABEL: define private void @initialize_metadata_SubButtHolder
95
+ // CHECK-V4 : call void @swift_initClassMetadata(
71
96
72
- // CHECK-V3 -LABEL: define private void @initialize_metadata_SubSubButtHolder
73
- // CHECK-V3 : call void @swift_initClassMetadata(
97
+ // CHECK-V4 -LABEL: define private void @initialize_metadata_SubSubButtHolder
98
+ // CHECK-V4 : call void @swift_initClassMetadata(
74
99
0 commit comments