@@ -79,6 +79,9 @@ public func functionWithResilientEnum(_ m: Medium) -> Medium {
79
79
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
80
80
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
81
81
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
82
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
83
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
84
+ // CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
82
85
// This is copying the +0 argument to be used as a return value.
83
86
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
84
87
// CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
@@ -97,6 +100,9 @@ public func functionWithIndirectResilientEnum(_ ia: IndirectApproach) -> Indirec
97
100
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
98
101
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
99
102
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
103
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
104
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
105
+ // CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
100
106
// This is copying the +0 argument into the return slot.
101
107
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
102
108
// CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
@@ -115,6 +121,9 @@ public func constructResilientEnumNoPayload() -> Medium {
115
121
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
116
122
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
117
123
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
124
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
125
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
126
+ // CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
118
127
119
128
// CHECK-16-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 16
120
129
// CHECK-32-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 14
@@ -134,6 +143,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
134
143
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
135
144
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
136
145
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
146
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
147
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
148
+ // CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
137
149
138
150
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
139
151
// CHECK-NEXT: [[WITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
@@ -146,6 +158,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
146
158
// CHECK-NEXT: [[METADATA2:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
147
159
// CHECK-NEXT: [[VWT_ADDR2:%.*]] = getelementptr inbounds ptr, ptr [[METADATA2]], [[INT]] -1
148
160
// CHECK-NEXT: [[VWT2:%.*]] = load ptr, ptr [[VWT_ADDR2]]
161
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR2]] to i64
162
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
163
+ // CHECK-arm64e: [[VWT2:%.*]] = inttoptr i64 {{%.*}} to ptr
149
164
150
165
// CHECK-16-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT2]], i32 16
151
166
// CHECK-32-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT2]], i32 14
@@ -165,6 +180,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
165
180
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
166
181
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
167
182
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
183
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
184
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
185
+ // CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
168
186
169
187
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
170
188
// CHECK: [[WITNESS_FOR_SIZE:%size]] = load [[INT]], ptr [[WITNESS_ADDR]]
@@ -228,14 +246,18 @@ public func resilientSwitchTest(_ m: Medium) -> Int {
228
246
229
247
public func reabstraction< T> ( _ f: ( Medium ) -> T ) { }
230
248
231
- // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOXEF"(ptr %0, ptr %1)
232
- public func resilientEnumPartialApply( _ f: ( Medium ) -> Int ) {
249
+ // CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOXEF"(ptr %0, ptr %1)
250
+ // CHECK-64: [[STACKALLOC:%.*]] = alloca i8
251
+ // CHECK-64: call swiftcc void @"$s15enum_resilience13reabstractionyyx010resilient_A06MediumOXElF"(ptr @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA{{(\.ptrauth)?}}", ptr [[CONTEXT:%.*]], ptr @"$sSiN")
252
+ // CHECK-64: ret void
233
253
234
- // CHECK: [[STACKALLOC:%.*]] = alloca i8
235
- // CHECK: call swiftcc void @"$s15enum_resilience13reabstractionyyx010resilient_A06MediumOXElF"(ptr @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA{{(\.ptrauth)?}}", ptr [[CONTEXT:%.*]], ptr @"$sSiN")
254
+ // CHECK-32-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOXEF"(ptr %0, ptr %1)
255
+ // CHECK-32: [[STACKALLOC:%.*]] = alloca i8
256
+ // CHECK-32: call swiftcc void @"$s15enum_resilience13reabstractionyyx010resilient_A06MediumOXElF"(ptr @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA", ptr [[CONTEXT:%.*]], ptr @"$sSiN")
257
+ // CHECK-32: ret void
258
+ public func resilientEnumPartialApply( _ f: ( Medium ) -> Int ) {
236
259
reabstraction ( f)
237
260
238
- // CHECK: ret void
239
261
}
240
262
241
263
// CHECK-LABEL: define internal swiftcc void @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA"(ptr noalias nocapture sret({{.*}}) %0, ptr noalias %1, ptr swiftself %2)
@@ -268,7 +290,7 @@ public func getResilientEnumType() -> Any.Type {
268
290
// CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont
269
291
270
292
// CHECK: cacheIsNull:
271
- // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s15enum_resilience24EnumWithResilientPayloadOMn")
293
+ // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s15enum_resilience24EnumWithResilientPayloadOMn{{(\.ptrauth.*)?}} ")
272
294
// CHECK-NEXT: [[RESPONSE_METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0
273
295
// CHECK-NEXT: [[RESPONSE_STATE:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1
274
296
// CHECK-NEXT: br label %cont
@@ -307,9 +329,12 @@ public func constructExhaustiveWithResilientMembers() -> SimpleShape {
307
329
return . KleinBottle
308
330
}
309
331
310
- // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i{{64|32}}, i8 } @"$s15enum_resilience19constructFullyFixed010resilient_A00dE6LayoutOyF"()
311
- // CHECK: ret { [[INT]], i8 } { [[INT]] 0, i8 1 }
312
- // CHECK-NEXT: {{^}$}}
332
+ // CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i{{64|32}}, i8 } @"$s15enum_resilience19constructFullyFixed010resilient_A00dE6LayoutOyF"()
333
+ // CHECK-64: ret { [[INT]], i8 } { [[INT]] 0, i8 1 }
334
+ // CHECK-64-NEXT: {{^}$}}
335
+ // CHECK-32-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i{{64|32}}, i8 } @"$s15enum_resilience19constructFullyFixed010resilient_A00dE6LayoutOyF"()
336
+ // CHECK-32: ret { [[INT]], i8 } { [[INT]] 0, i8 1 }
337
+ // CHECK-32-NEXT: {{^}$}}
313
338
public func constructFullyFixed( ) -> FullyFixedLayout {
314
339
return . noPayload
315
340
}
@@ -324,6 +349,9 @@ public func constructFullyFixed() -> FullyFixedLayout {
324
349
// CHECK: [[SATISFIED1]]:
325
350
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_METADATA]], [[INT]] -1
326
351
// CHECK-NEXT: [[SIZE_VWT:%.*]] = load ptr, ptr [[T1]],
352
+ // CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
353
+ // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
354
+ // CHECK-arm64e: [[SIZE_VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
327
355
// CHECK-NEXT: [[SIZE_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_VWT]], i32 8
328
356
// CHECK-NEXT: store ptr [[SIZE_LAYOUT_1]],
329
357
// CHECK-NEXT: getelementptr
0 commit comments