@@ -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
229247public 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: {{^}$}}
313338public 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