1
1
// RUN: %empty-directory(%t)
2
- // RUN: %target- swift-frontend -emit-ir -o - %s -module-name test \
2
+ // RUN: %swift-frontend -emit-ir -o - %s -module-name test \
3
3
// RUN: -enable-experimental-feature NonescapableTypes \
4
4
// RUN: -parse-as-library \
5
5
// RUN: -enable-library-evolution \
6
- // RUN: > %t/test.irgen
6
+ // RUN: -target %target-cpu-apple-macosx15 \
7
+ // RUN: > %t/test_new.irgen
7
8
8
- // RUN: %FileCheck %s < %t/test.irgen
9
+ // RUN: %swift-frontend -emit-ir -o - %s -module-name test \
10
+ // RUN: -enable-experimental-feature NonescapableTypes \
11
+ // RUN: -parse-as-library \
12
+ // RUN: -enable-library-evolution \
13
+ // RUN: -target %target-cpu-apple-macosx14 \
14
+ // RUN: > %t/test_old.irgen
15
+
16
+ // RUN: %FileCheck --check-prefix=NEW %s < %t/test_new.irgen
17
+ // RUN: %FileCheck --check-prefix=OLD %s < %t/test_old.irgen
9
18
10
19
// rdar://124401253
11
- // REQUIRES: OS=macosx || OS=linux || OS=windows-msvc
20
+ // REQUIRES: OS=macosx
12
21
// UNSUPPORTED: CPU=arm64e
13
22
14
23
@frozen
@@ -28,14 +37,104 @@ public enum NeverCopyable<Wrapped: ~Copyable>: ~Copyable {
28
37
@frozen
29
38
public struct NonCopyable : ~ Copyable { }
30
39
31
- // CHECK: @"$s4test1CCMF" =
32
- // CHECK-SAME: @"symbolic _____yxG 4test21ConditionallyCopyableOAARi_zrlE"
33
- // CHECK-SAME: @"get_type_metadata Ri_zl4test21ConditionallyCopyableOyAA03NonC0VG.3"
34
- // CHECK-SAME: @"symbolic _____yxG 4test21ConditionallyCopyableOAARi_zrlE"
35
- // CHECK-SAME: @"get_type_metadata Ri_zl4test21ConditionallyCopyableOyAA03NonC0VG.3"
36
- public class C < T: ~ Copyable> {
40
+ // HINT: when debugging this test, you can look for an `i32 2` field in the
41
+ // 'MF' constant as a separator that precedes each field descriptor.
42
+
43
+ // NEW: @"$s4test8CC_TestsCMF" =
44
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test21ConditionallyCopyableOyxG.3"
45
+ // NEW-SAME: @"symbolic _____yq_G 4test21ConditionallyCopyableOAARi_zrlE"
46
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test21ConditionallyCopyableOyAA03NonC0VG.4"
47
+ // NEW-SAME: @"symbolic _____ySSG 4test21ConditionallyCopyableOAARi_zrlE"
48
+
49
+ // OLD: @"$s4test8CC_TestsCMF" =
50
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test21ConditionallyCopyableOyxG.3"
51
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test21ConditionallyCopyableOyq_G.4"
52
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test21ConditionallyCopyableOyAA03NonC0VG.5"
53
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test21ConditionallyCopyableOySSG.6"
54
+ public class CC_Tests < NCG: ~ Copyable, T> {
55
+ var ccNCG : ConditionallyCopyable < NCG > = . none
37
56
var ccT : ConditionallyCopyable < T > = . none
38
57
var ccNC : ConditionallyCopyable < NonCopyable > = . none
39
- var ncT : ConditionallyCopyable < T > = . none
40
- var ncNC : ConditionallyCopyable < NonCopyable > = . none
58
+ var ccC : ConditionallyCopyable < String > = . none
59
+ }
60
+
61
+
62
+ /// For the "never copyable" fields, we expect to always go through the
63
+ /// type metadata accessor strategy, which is designed to hide these
64
+ /// fields until a future runtime says they're safe to reflect.
65
+
66
+ // NEW: @"$s4test8NC_TestsCMF" =
67
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOyxG.5"
68
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOyq_G.6"
69
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOyAA03NonC0VG.7"
70
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOySSG.8"
71
+
72
+ // OLD: @"$s4test8NC_TestsCMF" =
73
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOyxG.7"
74
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOyq_G.8"
75
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOyAA03NonC0VG.9"
76
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test13NeverCopyableOySSG.10"
77
+ public class NC_Tests < NCG: ~ Copyable, T> {
78
+ var ncNCG : NeverCopyable < NCG > = . none
79
+ var ncT : NeverCopyable < T > = . none
80
+ var ncNC : NeverCopyable < NonCopyable > = . none
81
+ var ncC : NeverCopyable < String > = . none
82
+ }
83
+
84
+
85
+ // NEW: @"$s4test17StdlibTypes_TestsCMF" =
86
+ // NEW-SAME: @"symbolic xSg"
87
+ // NEW-SAME: @"symbolic q_Sg"
88
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test11NonCopyableVSg.9"
89
+ // NEW-SAME: @"symbolic SSSg"
90
+ // NEW-SAME: @"symbolic SPyxG"
91
+ // NEW-SAME: @"symbolic SPyq_G"
92
+ // NEW-SAME: @"symbolic SPy_____G 4test11NonCopyableV"
93
+ // NEW-SAME: @"symbolic SPySSG"
94
+
95
+ // OLD: @"$s4test17StdlibTypes_TestsCMF" =
96
+ // OLD-SAME: @"symbolic xSg"
97
+ // OLD-SAME: @"symbolic q_Sg"
98
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test11NonCopyableVSg.11"
99
+ // OLD-SAME: @"symbolic SSSg"
100
+ // OLD-SAME: @"symbolic SPyxG"
101
+ // OLD-SAME: @"symbolic SPyq_G"
102
+ // OLD-SAME: @"symbolic SPy_____G 4test11NonCopyableV"
103
+ // OLD-SAME: @"symbolic SPySSG"
104
+ public class StdlibTypes_Tests < NCG: ~ Copyable, T> {
105
+ var optNCG : Optional < NCG > = . none
106
+ var optT : Optional < T > = . none
107
+ var optNC : Optional < NonCopyable > = . none
108
+ var optC : Optional < String > = . none
109
+
110
+ var upNCG : UnsafePointer < NCG > = . init( bitPattern: 16 ) !
111
+ var upT : UnsafePointer < T > = . init( bitPattern: 32 ) !
112
+ var upNC : UnsafePointer < NonCopyable > = . init( bitPattern: 64 ) !
113
+ var upC : UnsafePointer < String > = . init( bitPattern: 128 ) !
114
+ }
115
+
116
+
117
+ // NEW: @"$s4test19PlainlyStored_TestsCMF" =
118
+ // NEW-SAME: @"symbolic x"
119
+ // NEW-SAME: @"symbolic q_"
120
+ // NEW-SAME: @"get_type_metadata Ri_zr0_l4test11NonCopyableV.10"
121
+ // NEW-SAME: @"symbolic SS"
122
+
123
+ // OLD: @"$s4test19PlainlyStored_TestsCMF" =
124
+ // OLD-SAME: @"symbolic x"
125
+ // OLD-SAME: @"symbolic q_"
126
+ // OLD-SAME: @"get_type_metadata Ri_zr0_l4test11NonCopyableV.12"
127
+ // OLD-SAME: @"symbolic SS"
128
+ public class PlainlyStored_Tests < NCG: ~ Copyable, T> {
129
+ var ncg : NCG
130
+ var t : T
131
+ var concreteNC : NonCopyable
132
+ var str : String
133
+
134
+ public init ( _ ncg: consuming NCG , _ t: T ) {
135
+ self . ncg = ncg
136
+ self . t = t
137
+ self . concreteNC = NonCopyable ( )
138
+ self . str = " "
139
+ }
41
140
}
0 commit comments