Skip to content

Commit 7042ef9

Browse files
authored
Merge pull request #74902 from swiftlang/egorzhdan/pthauth-vwt-tests
[IRGen] Upstream test changes for pointer authenticated value witness tables
2 parents 69f0d2c + 91bef84 commit 7042ef9

18 files changed

+208
-45
lines changed

test/IRGen/boxed_existential.sil

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ entry(%x : $*T):
2626
// CHECK: [[ADDR:%.*]] = extractvalue { ptr, ptr } [[BOX_PAIR]], 1
2727
%b = alloc_existential_box $Error, $T
2828
%p = project_existential_box $T in %b : $Error
29-
// CHECK: [[INITWITHTAKE:%.*]] = load ptr, ptr %5
29+
// CHECK: load ptr, ptr
30+
// CHECK: [[INITWITHTAKE:%.*]] = load ptr, ptr
3031
// CHECK: call ptr [[INITWITHTAKE]](ptr noalias [[ADDR]], ptr noalias %0, ptr %T)
3132
copy_addr [take] %x to [init] %p : $*T
3233
// CHECK: ret ptr [[BOX]]

test/IRGen/empty_enum.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s
22

33
// CHECK: @"$s10empty_enum6JamaisOMf" =
4-
// CHECK-SAME: {{@"\$sytWV"|ptr @"\$s10empty_enum6JamaisOWV"}}
4+
// CHECK-SAME: {{@"\$sytWV(.ptrauth)?"|ptr @"\$s10empty_enum6JamaisOWV"}}
55

66
enum Jamais {}

test/IRGen/enum_dynamic_multi_payload.sil

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-frontend -disable-type-layout %s -gnone -emit-ir -I %S/Inputs | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize
1+
// RUN: %target-swift-frontend -disable-type-layout %s -gnone -emit-ir -I %S/Inputs | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize --check-prefix=CHECK-%target-cpu
22

33
import Builtin
44

@@ -432,6 +432,9 @@ entry(%a : $*EitherOr<T, C>, %b : $*EitherOr<T, C>):
432432
// CHECK-NEXT: br i1 [[T_OK]],
433433
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[T_CHECKED]]
434434
// CHECK-NEXT: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
435+
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
436+
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
437+
// CHECK-arm64e: [[VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
435438
// CHECK-NEXT: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8
436439
// CHECK-NEXT: store ptr [[LAYOUT]], {{.*}} [[BUF0]]
437440

@@ -443,6 +446,9 @@ entry(%a : $*EitherOr<T, C>, %b : $*EitherOr<T, C>):
443446
// CHECK-NEXT: br i1 [[U_OK]],
444447
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[U_CHECKED]]
445448
// CHECK-NEXT: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
449+
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
450+
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
451+
// CHECK-arm64e: [[VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
446452
// CHECK-NEXT: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8
447453
// CHECK-NEXT: store ptr [[LAYOUT]], {{.*}} [[BUF1]]
448454

test/IRGen/enum_resilience.swift

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ public func functionWithResilientEnum(_ m: Medium) -> Medium {
7979
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
8080
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
8181
// 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
8285
// This is copying the +0 argument to be used as a return value.
8386
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
8487
// CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
@@ -97,6 +100,9 @@ public func functionWithIndirectResilientEnum(_ ia: IndirectApproach) -> Indirec
97100
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
98101
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
99102
// 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
100106
// This is copying the +0 argument into the return slot.
101107
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
102108
// CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
@@ -115,6 +121,9 @@ public func constructResilientEnumNoPayload() -> Medium {
115121
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
116122
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
117123
// 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
118127

119128
// CHECK-16-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 16
120129
// CHECK-32-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 14
@@ -134,6 +143,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
134143
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
135144
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
136145
// 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
137149

138150
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
139151
// CHECK-NEXT: [[WITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
@@ -146,6 +158,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
146158
// CHECK-NEXT: [[METADATA2:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
147159
// CHECK-NEXT: [[VWT_ADDR2:%.*]] = getelementptr inbounds ptr, ptr [[METADATA2]], [[INT]] -1
148160
// 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
149164

150165
// CHECK-16-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT2]], i32 16
151166
// CHECK-32-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT2]], i32 14
@@ -165,6 +180,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
165180
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
166181
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
167182
// 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
168186

169187
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
170188
// CHECK: [[WITNESS_FOR_SIZE:%size]] = load [[INT]], ptr [[WITNESS_ADDR]]
@@ -228,14 +246,18 @@ public func resilientSwitchTest(_ m: Medium) -> Int {
228246

229247
public func reabstraction<T>(_ f: (Medium) -> T) {}
230248

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
233253

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) {
236259
reabstraction(f)
237260

238-
// CHECK: ret void
239261
}
240262

241263
// 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 {
268290
// CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont
269291

270292
// 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.*)?}}")
272294
// CHECK-NEXT: [[RESPONSE_METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0
273295
// CHECK-NEXT: [[RESPONSE_STATE:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1
274296
// CHECK-NEXT: br label %cont
@@ -307,9 +329,12 @@ public func constructExhaustiveWithResilientMembers() -> SimpleShape {
307329
return .KleinBottle
308330
}
309331

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: {{^}$}}
313338
public func constructFullyFixed() -> FullyFixedLayout {
314339
return .noPayload
315340
}
@@ -324,6 +349,9 @@ public func constructFullyFixed() -> FullyFixedLayout {
324349
// CHECK: [[SATISFIED1]]:
325350
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_METADATA]], [[INT]] -1
326351
// 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
327355
// CHECK-NEXT: [[SIZE_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_VWT]], i32 8
328356
// CHECK-NEXT: store ptr [[SIZE_LAYOUT_1]],
329357
// CHECK-NEXT: getelementptr

0 commit comments

Comments
 (0)