Skip to content

Commit 65de2a5

Browse files
committed
SILGen: In unavailable stubs apply diagnostic func's back deployment thunk.
Part of rdar://107388493.
1 parent 798e29f commit 65de2a5

9 files changed

+55
-36
lines changed

lib/SILGen/SILGenApply.cpp

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5829,7 +5829,15 @@ SILGenFunction::emitApplyOfLibraryIntrinsic(SILLocation loc,
58295829
SubstitutionMap subMap,
58305830
ArrayRef<ManagedValue> args,
58315831
SGFContext ctx) {
5832-
auto callee = Callee::forDirect(*this, SILDeclRef(fn), subMap, loc);
5832+
return emitApplyOfLibraryIntrinsic(loc, SILDeclRef(fn), subMap, args, ctx);
5833+
}
5834+
5835+
RValue SILGenFunction::emitApplyOfLibraryIntrinsic(SILLocation loc,
5836+
SILDeclRef declRef,
5837+
SubstitutionMap subMap,
5838+
ArrayRef<ManagedValue> args,
5839+
SGFContext ctx) {
5840+
auto callee = Callee::forDirect(*this, declRef, subMap, loc);
58335841

58345842
auto origFormalType = callee.getOrigFormalType();
58355843
auto substFormalType = callee.getSubstFormalType();
@@ -5865,19 +5873,25 @@ SILGenFunction::emitApplyOfLibraryIntrinsic(SILLocation loc,
58655873

58665874
void SILGenFunction::emitApplyOfUnavailableCodeReached() {
58675875
auto loc = RegularLocation::getAutoGeneratedLocation(F.getLocation());
5876+
FuncDecl *fd = getASTContext().getDiagnoseUnavailableCodeReached();
58685877

5869-
// FIXME: When the deployment target is < Swift 5.9 the stdlib function will
5870-
// be unavailable. Call the @backDeployed fallback function instead.
5871-
auto *diagnoseUnavailableCodeReachedFunc =
5872-
getASTContext().getDiagnoseUnavailableCodeReached();
5873-
5874-
if (!diagnoseUnavailableCodeReachedFunc) {
5878+
if (!fd) {
5879+
// Broken stdlib?
58755880
B.createUnconditionalFail(loc, "unavailable code reached");
58765881
return;
58775882
}
58785883

5879-
emitApplyOfLibraryIntrinsic(loc, diagnoseUnavailableCodeReachedFunc,
5880-
SubstitutionMap(), {}, SGFContext());
5884+
auto declRef = SILDeclRef(fd);
5885+
if (fd->isBackDeployed(getASTContext())) {
5886+
// The standard library entry point for the diagnostic function was
5887+
// introduced in Swift 5.9 so we call the back deployment thunk in case this
5888+
// code will execute on an older runtime.
5889+
declRef =
5890+
declRef.asBackDeploymentKind(SILDeclRef::BackDeploymentKind::Thunk);
5891+
}
5892+
5893+
emitApplyOfLibraryIntrinsic(loc, declRef, SubstitutionMap(), {},
5894+
SGFContext());
58815895
}
58825896

58835897
StringRef SILGenFunction::getMagicFunctionString() {

lib/SILGen/SILGenFunction.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1901,6 +1901,11 @@ class LLVM_LIBRARY_VISIBILITY SILGenFunction
19011901
ArrayRef<ManagedValue> args,
19021902
SGFContext ctx);
19031903

1904+
RValue emitApplyOfLibraryIntrinsic(SILLocation loc, SILDeclRef declRef,
1905+
SubstitutionMap subMap,
1906+
ArrayRef<ManagedValue> args,
1907+
SGFContext ctx);
1908+
19041909
/// Emits a call to the `_diagnoseUnavailableCodeReached()` function in the
19051910
/// standard library.
19061911
void emitApplyOfUnavailableCodeReached();

test/SILGen/unavailable_decl_optimization_stub.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public struct S {}
44

55
// CHECK-LABEL: sil {{.*}} @$s4Test15unavailableFuncAA1SVyF
6-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
6+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
77
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
88
// CHECK: function_ref @$s4Test1SVACycfC
99
// CHECK: } // end sil function '$s4Test15unavailableFuncAA1SVyF'
@@ -15,7 +15,7 @@ public func unavailableFunc() -> S {
1515
enum SomeError: Error { case generic }
1616

1717
// CHECK-LABEL: sil {{.*}} @$s4Test23unavailableThrowingFuncyyKF
18-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
18+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
1919
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
2020
// CHECK: throw
2121
// CHECK: } // end sil function '$s4Test23unavailableThrowingFuncyyKF'
@@ -26,14 +26,14 @@ public func unavailableThrowingFunc() throws {
2626

2727
// one-time initialization function for globalVar
2828
// CHECK-LABEL: sil {{.*}} @$s4Test9globalVar_WZ
29-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
29+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
3030
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
3131
// CHECK: alloc_global
3232
// CHECK: } // end sil function '$s4Test9globalVar_WZ'
3333
//
3434
// globalVar.unsafeMutableAddressor
3535
// CHECK-LABEL: sil {{.*}} @$s4Test9globalVarAA1SVvau
36-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
36+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
3737
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
3838
// CHECK: global_addr @$s4Test9globalVar_Wz
3939
// CHECK: } // end sil function '$s4Test9globalVarAA1SVvau'

test/SILGen/unavailable_decl_optimization_stub_class.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ func foo() {}
77
public class ExplicitInitClass {
88
// ExplicitInitClass.s.getter
99
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassC1sAA1SVvg
10-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
10+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
1111
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
1212
// CHECK: load
1313
// CHECK: } // end sil function '$s4Test17ExplicitInitClassC1sAA1SVvg'
1414
//
1515
// ExplicitInitClass.s.setter
1616
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassC1sAA1SVvs
17-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
17+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
1818
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
1919
// CHECK: assign
2020
// CHECK: } // end sil function '$s4Test17ExplicitInitClassC1sAA1SVvs'
2121
//
2222
// ExplicitInitClass.s.modify
2323
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassC1sAA1SVvM
24-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
24+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
2525
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
2626
// CHECK: yield
2727
// CHECK: } // end sil function '$s4Test17ExplicitInitClassC1sAA1SVvM'
2828
public var s: S
2929

3030
// ExplicitInitClass.__allocating_init()
3131
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassCACycfC
32-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
32+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
3333
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
3434
// CHECK: alloc_ref $ExplicitInitClass
3535
// CHECK: function_ref @$s4Test17ExplicitInitClassCACycfc
3636
// CHECK: } // end sil function '$s4Test17ExplicitInitClassCACycfC'
3737
//
3838
// ExplicitInitClass.init()
3939
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassCACycfc
40-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
40+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
4141
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
4242
// CHECK: function_ref @$s4Test1SVACycfC
4343
// CHECK: } // end sil function '$s4Test17ExplicitInitClassCACycfc'
@@ -47,14 +47,14 @@ public class ExplicitInitClass {
4747

4848
// ExplicitInitClass.deinit
4949
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassCfd
50-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
50+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
5151
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
5252
// CHECK: {{%.*}} = function_ref @$s4Test3fooyyF
5353
// CHECK: } // end sil function '$s4Test17ExplicitInitClassCfd'
5454
//
5555
// ExplicitInitClass.__deallocating_deinit
5656
// CHECK-LABEL: sil {{.*}} @$s4Test17ExplicitInitClassCfD
57-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
57+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
5858
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
5959
// CHECK: {{%.*}} = function_ref @$s4Test17ExplicitInitClassCfd
6060
// CHECK: } // end sil function '$s4Test17ExplicitInitClassCfD'

test/SILGen/unavailable_decl_optimization_stub_objc.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,28 @@ func foo() {}
1010
@objc public class C: NSObject {
1111
// C.__allocating_init()
1212
// CHECK-LABEL: sil {{.*}} @$s4Test1CCACycfC
13-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
13+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
1414
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
1515
// CHECK: {{%.*}} = function_ref @$s4Test1CCACycfcTD
1616
// CHECK: } // end sil function '$s4Test1CCACycfC'
1717
//
1818
// dynamic C.init()
1919
// CHECK-LABEL: sil {{.*}} @$s4Test1CCACycfcTD
20-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
20+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
2121
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
2222
// CHECK: objc_method %0 : $C, #C.init!initializer.foreign
2323
// CHECK: } // end sil function '$s4Test1CCACycfcTD'
2424
//
2525
// C.init()
2626
// CHECK-LABEL: sil {{.*}} @$s4Test1CCACycfc
27-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
27+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
2828
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
2929
// CHECK: {{%.*}} = function_ref @$s4Test3fooyyF
3030
// CHECK: } // end sil function '$s4Test1CCACycfc'
3131
//
3232
// @objc C.init()
3333
// CHECK-LABEL: sil {{.*}} @$s4Test1CCACycfcTo
34-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
34+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
3535
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
3636
// CHECK: {{%.*}} = function_ref @$s4Test1CCACycfc
3737
// CHECK: } // end sil function '$s4Test1CCACycfcTo'
@@ -41,14 +41,14 @@ func foo() {}
4141

4242
// C.__deallocating_deinit
4343
// CHECK-LABEL: sil {{.*}} @$s4Test1CCfD
44-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
44+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
4545
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
4646
// CHECK: {{%.*}} = function_ref @$s4Test3fooyyF
4747
// CHECK: } // end sil function '$s4Test1CCfD'
4848
//
4949
// @objc C.__deallocating_deinit
5050
// CHECK-LABEL: sil {{.*}} @$s4Test1CCfDTo
51-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
51+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
5252
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
5353
// CHECK: {{%.*}} = function_ref @$s4Test1CCfD
5454
// CHECK: } // end sil function '$s4Test1CCfDTo'

test/SILGen/unavailable_decl_optimization_stub_opaque_type.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public struct S {}
55
extension S: P {}
66

77
// CHECK-LABEL: sil {{.*}} @$s4Test27unavailableOpaqueReturnFuncQryF
8-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
8+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
99
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
1010
// CHECK: function_ref @$s4Test1SVACycfC
1111
// CHECK: } // end sil function '$s4Test27unavailableOpaqueReturnFuncQryF'

test/SILGen/unavailable_decl_optimization_stub_protocol_witness.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ extension EnumWithProtocolWitness: P {}
1717
// protocol witness for static P.requirement(_:) in conformance EnumWithProtocolWitness
1818
//
1919
// CHECK-LABEL: sil {{.*}} @$s4Test23EnumWithProtocolWitnessOAA1PA2aDP11requirementyxAA1SVFZTW
20-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
20+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
2121
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
2222
// CHECK: {{%.*}} = function_ref @$s4Test23EnumWithProtocolWitnessO11requirementyAcA1SVcACmF
2323
// CHECK: } // end sil function '$s4Test23EnumWithProtocolWitnessOAA1PA2aDP11requirementyxAA1SVFZTW'
2424
//
2525
// EnumWithProtocolWitness.requirement(_:)
2626
//
2727
// CHECK-LABEL: sil {{.*}} @$s4Test23EnumWithProtocolWitnessO11requirementyAcA1SVcACmF
28-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
28+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
2929
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
3030
// CHECK: enum $EnumWithProtocolWitness, #EnumWithProtocolWitness.requirement!enumelt
3131
// CHECK: } // end sil function '$s4Test23EnumWithProtocolWitnessO11requirementyAcA1SVcACmF'

test/SILGen/unavailable_decl_optimization_stub_struct.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public struct S {}
55
@available(*, unavailable)
66
public struct ImplicitInitStruct {
77
// CHECK-LABEL: sil hidden {{.*}} @$s4Test18ImplicitInitStructVACycfC
8-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
8+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
99
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
1010
// CHECK: return
1111
// CHECK: } // end sil function '$s4Test18ImplicitInitStructVACycfC'
@@ -21,28 +21,28 @@ public func testImplicitConstructor() {
2121
public struct ExplicitInitStruct {
2222
// ExplicitInitStruct.s.getter
2323
// CHECK-LABEL: sil {{.*}} @$s4Test18ExplicitInitStructV1sAA1SVvg
24-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
24+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
2525
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
2626
// CHECK: struct_extract
2727
// CHECK: } // end sil function '$s4Test18ExplicitInitStructV1sAA1SVvg'
2828
//
2929
// ExplicitInitStruct.s.setter
3030
// CHECK-LABEL: sil {{.*}} @$s4Test18ExplicitInitStructV1sAA1SVvs
31-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
31+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
3232
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
3333
// CHECK: assign
3434
// CHECK: } // end sil function '$s4Test18ExplicitInitStructV1sAA1SVvs'
3535
//
3636
// ExplicitInitStruct.s.modify
3737
// CHECK-LABEL: sil {{.*}} @$s4Test18ExplicitInitStructV1sAA1SVvM
38-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
38+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
3939
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
4040
// CHECK: yield
4141
// CHECK: } // end sil function '$s4Test18ExplicitInitStructV1sAA1SVvM'
4242
public var s: S
4343

4444
// CHECK-LABEL: sil {{.*}} @$s4Test18ExplicitInitStructVACycfC
45-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
45+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
4646
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
4747
// CHECK: function_ref @$s4Test1SVACycfC
4848
// CHECK: } // end sil function '$s4Test18ExplicitInitStructVACycfC'
@@ -57,7 +57,7 @@ func foo() {}
5757
@_moveOnly
5858
struct MoveOnlyStruct {
5959
// CHECK-LABEL: sil {{.*}} @$s4Test14MoveOnlyStructVfD
60-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
60+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN]] : $@convention(thin) () -> Never
6161
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
6262
// CHECK: {{%.*}} = function_ref @$s4Test3fooyyF
6363
// CHECK: } // end sil function '$s4Test14MoveOnlyStructVfD'

test/SILOptimizer/unavailable_decl_optimization_stub.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public struct S {}
44

55
// CHECK-LABEL: sil {{.*}} @$s4Test15unavailableFuncAA1SVyF
6-
// CHECK: [[FNREF:%.*]] = function_ref @$ss31_diagnoseUnavailableCodeReacheds5NeverOyF
6+
// CHECK: [[FNREF:%.*]] = function_ref @$[[DIAGNOSEFN:ss31_diagnoseUnavailableCodeReacheds5NeverOy(FTwb|F)]] : $@convention(thin) () -> Never
77
// CHECK-NEXT: [[APPLY:%.*]] = apply [[FNREF]]()
88
// CHECK-NEXT: unreachable
99
// CHECK-NEXT: end sil function '$s4Test15unavailableFuncAA1SVyF'

0 commit comments

Comments
 (0)