@@ -932,6 +932,252 @@ struct ImplAsync: PAsync {
932932 }
933933}
934934
935+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_f0ySbAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
936+ // CHECK: %swifterror = alloca swifterror ptr, align 8
937+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_f0ySbAA0eF0V_SbtYaFTu")
938+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
939+ // CHECK: store ptr null, ptr %swifterror, align 8
940+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
941+ // CHECK: [[CALL_RES:%.*]] = call { ptr, ptr } (i32, ptr, ptr, ...) @llvm.coro.suspend.async.sl_p0p0s(i32 {{[0-9]+}}, ptr [[CORO_RESUME]], ptr @__swift_async_resume_project_context, ptr @"{{.*}}", ptr @"{{.*}}", ptr {{%.*}}, i1 %1)
942+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, ptr } [[CALL_RES]], 1
943+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
944+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
945+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
946+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
947+ // CHECK: typed.error.load:
948+ // CHECK: br label %[[SET_ERROR:.*]]
949+ // CHECK: [[SUCCESS]]:
950+ // CHECK: br label %[[COMMON_RET:.*]]
951+ // CHECK: [[COMMON_RET]]:
952+ // CHECK: [[RETVAL:%.*]] = phi i1 [ false, %[[SET_ERROR]] ], [ true, %[[SUCCESS]] ]
953+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i1 [[RETVAL]])
954+ // CHECK: unreachable
955+ // CHECK: [[SET_ERROR]]:
956+ // CHECK: store ptr null, ptr %swifterror, align 8
957+ // CHECK: br label %[[COMMON_RET]]
958+ // CHECK: }
959+ @available ( SwiftStdlib 6 . 0 , * )
960+ func callImplAsync_f0( _ impl: ImplAsync , _ b: Bool ) async -> Bool {
961+ do {
962+ try await impl. f0 ( b)
963+ return true
964+ } catch {
965+ return false
966+ }
967+ }
968+
969+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_f1ySiAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
970+ // CHECK: %swifterror = alloca swifterror ptr, align 8
971+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_f1ySiAA0eF0V_SbtYaFTu")
972+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
973+ // CHECK: store ptr null, ptr %swifterror, align 8
974+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
975+ // CHECK: [[CALL_RES:%.*]] = call { ptr, i64, ptr } (i32, ptr, ptr, ...) @llvm.coro.suspend.async.sl_p0i64p0s(i32 {{[0-9]+}}, ptr [[CORO_RESUME]], ptr @__swift_async_resume_project_context, ptr @"{{.*}}", ptr @"{{.*}}", ptr {{%.*}}, i1 %1)
976+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { ptr, i64, ptr } [[CALL_RES]], 1
977+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, ptr } [[CALL_RES]], 2
978+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
979+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
980+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
981+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
982+ // CHECK: typed.error.load:
983+ // CHECK: br label %[[SET_ERROR:.*]]
984+ // CHECK: [[SUCCESS]]:
985+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
986+ // CHECK: br label %[[COMMON_RET:.*]]
987+ // CHECK: [[COMMON_RET]]:
988+ // CHECK: [[RETVAL:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
989+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL]])
990+ // CHECK: unreachable
991+ // CHECK: [[SET_ERROR]]:
992+ // CHECK: store ptr null, ptr %swifterror, align 8
993+ // CHECK: br label %[[COMMON_RET]]
994+ // CHECK: }
995+ @available ( SwiftStdlib 6 . 0 , * )
996+ func callImplAsync_f1( _ impl: ImplAsync , _ b: Bool ) async -> Int {
997+ do {
998+ return try await impl. f1 ( b)
999+ } catch {
1000+ return 0
1001+ }
1002+ }
1003+
1004+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_f2ySi_SitAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1005+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1006+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_f2ySi_SitAA0eF0V_SbtYaFTu")
1007+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1008+ // CHECK: store ptr null, ptr %swifterror, align 8
1009+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1010+ // CHECK: [[CALL_RES:%.*]] = call { ptr, i64, i64, ptr } (i32, ptr, ptr, ...) @llvm.coro.suspend.async.sl_p0i64i64p0s(i32 {{[0-9]+}}, ptr [[CORO_RESUME]], ptr @__swift_async_resume_project_context, ptr @"{{.*}}", ptr @"{{.*}}", ptr {{%.*}}, i1 %1)
1011+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { i64, i64 } {{%.*}}, 0
1012+ // CHECK: [[CALL_RES1:%.*]] = extractvalue { i64, i64 } {{%.*}}, 1
1013+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, i64, ptr } [[CALL_RES]], 3
1014+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1015+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1016+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1017+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1018+ // CHECK: typed.error.load:
1019+ // CHECK: br label %[[SET_ERROR:.*]]
1020+ // CHECK: [[SUCCESS]]:
1021+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1022+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1023+ // CHECK: br label %[[COMMON_RET:.*]]
1024+ // CHECK: [[COMMON_RET]]:
1025+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1026+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1027+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL0]], i64 [[RETVAL1]])
1028+ // CHECK: unreachable
1029+ // CHECK: [[SET_ERROR]]:
1030+ // CHECK: store ptr null, ptr %swifterror, align 8
1031+ // CHECK: br label %[[COMMON_RET]]
1032+ // CHECK: }
1033+ @available ( SwiftStdlib 6 . 0 , * )
1034+ func callImplAsync_f2( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int ) {
1035+ do {
1036+ return try await impl. f2 ( b)
1037+ } catch {
1038+ return ( 0 , 0 )
1039+ }
1040+ }
1041+
1042+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_f3ySi_S2itAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1043+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1044+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_f3ySi_S2itAA0eF0V_SbtYaFTu")
1045+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1046+ // CHECK: store ptr null, ptr %swifterror, align 8
1047+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1048+ // CHECK: [[CALL_RES:%.*]] = call { ptr, i64, i64, i64, ptr } (i32, ptr, ptr, ...) @llvm.coro.suspend.async.sl_p0i64i64i64p0s(i32 {{[0-9]+}}, ptr [[CORO_RESUME]], ptr @__swift_async_resume_project_context, ptr @"{{.*}}", ptr @"{{.*}}", ptr {{%.*}}, i1 %1)
1049+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { i64, i64, i64 } {{%.*}}, 0
1050+ // CHECK: [[CALL_RES1:%.*]] = extractvalue { i64, i64, i64 } {{%.*}}, 1
1051+ // CHECK: [[CALL_RES2:%.*]] = extractvalue { i64, i64, i64 } {{%.*}}, 2
1052+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, i64, i64, ptr } [[CALL_RES]], 4
1053+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1054+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1055+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1056+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1057+ // CHECK: typed.error.load:
1058+ // CHECK: br label %[[SET_ERROR:.*]]
1059+ // CHECK: [[SUCCESS]]:
1060+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1061+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1062+ // CHECK: [[SUCCESS_RES2:%.*]] = phi i64 [ [[CALL_RES2]], %entry ]
1063+ // CHECK: br label %[[COMMON_RET:.*]]
1064+ // CHECK: [[COMMON_RET]]:
1065+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1066+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1067+ // CHECK: [[RETVAL2:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES2]], %[[SUCCESS]] ]
1068+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL0]], i64 [[RETVAL1]], i64 [[RETVAL2]])
1069+ // CHECK: unreachable
1070+ // CHECK: [[SET_ERROR]]:
1071+ // CHECK: store ptr null, ptr %swifterror, align 8
1072+ // CHECK: br label %[[COMMON_RET]]
1073+ // CHECK: }
1074+ @available ( SwiftStdlib 6 . 0 , * )
1075+ func callImplAsync_f3( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int , Int ) {
1076+ do {
1077+ return try await impl. f3 ( b)
1078+ } catch {
1079+ return ( 0 , 0 , 0 )
1080+ }
1081+ }
1082+
1083+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_f4ySi_S3itAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1084+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1085+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_f4ySi_S3itAA0eF0V_SbtYaFTu")
1086+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1087+ // CHECK: store ptr null, ptr %swifterror, align 8
1088+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1089+ // CHECK: [[CALL_RES:%.*]] = call { ptr, i64, i64, i64, i64, ptr } (i32, ptr, ptr, ...) @llvm.coro.suspend.async.sl_p0i64i64i64i64p0s(i32 {{[0-9]+}}, ptr [[CORO_RESUME]], ptr @__swift_async_resume_project_context, ptr @"{{.*}}", ptr @"{{.*}}", ptr {{%.*}}, i1 %1)
1090+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 0
1091+ // CHECK: [[CALL_RES1:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 1
1092+ // CHECK: [[CALL_RES2:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 2
1093+ // CHECK: [[CALL_RES3:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 3
1094+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, i64, i64, i64, ptr } [[CALL_RES]], 5
1095+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1096+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1097+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1098+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1099+ // CHECK: typed.error.load:
1100+ // CHECK: br label %[[SET_ERROR:.*]]
1101+ // CHECK: [[SUCCESS]]:
1102+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1103+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1104+ // CHECK: [[SUCCESS_RES2:%.*]] = phi i64 [ [[CALL_RES2]], %entry ]
1105+ // CHECK: [[SUCCESS_RES3:%.*]] = phi i64 [ [[CALL_RES3]], %entry ]
1106+ // CHECK: br label %[[COMMON_RET:.*]]
1107+ // CHECK: [[COMMON_RET]]:
1108+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1109+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1110+ // CHECK: [[RETVAL2:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES2]], %[[SUCCESS]] ]
1111+ // CHECK: [[RETVAL3:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES3]], %[[SUCCESS]] ]
1112+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL0]], i64 [[RETVAL1]], i64 [[RETVAL2]], i64 [[RETVAL3]])
1113+ // CHECK: unreachable
1114+ // CHECK: [[SET_ERROR]]:
1115+ // CHECK: store ptr null, ptr %swifterror, align 8
1116+ // CHECK: br label %[[COMMON_RET]]
1117+ // CHECK: }
1118+ @available ( SwiftStdlib 6 . 0 , * )
1119+ func callImplAsync_f4( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int , Int , Int ) {
1120+ do {
1121+ return try await impl. f4 ( b)
1122+ } catch {
1123+ return ( 0 , 0 , 0 , 0 )
1124+ }
1125+ }
1126+
1127+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_f5ySi_S4itAA0eF0V_SbtYaF"(ptr noalias nocapture %0, ptr swiftasync %1, i1 %2)
1128+ // CHECK: %swifterror = alloca ptr, align 8
1129+ // CHECK: %call.aggresult = alloca <{ %TSi, %TSi, %TSi, %TSi, %TSi }>, align 8
1130+ // CHECK: %swifterror1 = alloca swifterror ptr, align 8
1131+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 1, ptr @"$s16typed_throws_abi16callImplAsync_f5ySi_S4itAA0eF0V_SbtYaFTu")
1132+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1133+ // CHECK: store ptr null, ptr %swifterror1, align 8
1134+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1135+ // CHECK: [[CALL_RES:%.*]] = call { ptr, ptr } (i32, ptr, ptr, ...) @llvm.coro.suspend.async.sl_p0p0s(i32 {{[0-9]+}}, ptr [[CORO_RESUME]], ptr @__swift_async_resume_project_context, ptr @"{{.*}}", ptr %call.aggresult, ptr {{%.*}}, i1 %2, ptr %swifterror)
1136+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, ptr } [[CALL_RES]], 1
1137+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror1, align 8
1138+ // CHECK: [[CALL_RES0:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1139+ // CHECK: [[CALL_RES1:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1140+ // CHECK: [[CALL_RES2:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1141+ // CHECK: [[CALL_RES3:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1142+ // CHECK: [[CALL_RES4:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1143+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror1, align 8
1144+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1145+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1146+ // CHECK: typed.error.load:
1147+ // CHECK: br label %[[SET_ERROR:.*]]
1148+ // CHECK: [[SUCCESS]]:
1149+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1150+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1151+ // CHECK: [[SUCCESS_RES2:%.*]] = phi i64 [ [[CALL_RES2]], %entry ]
1152+ // CHECK: [[SUCCESS_RES3:%.*]] = phi i64 [ [[CALL_RES3]], %entry ]
1153+ // CHECK: [[SUCCESS_RES4:%.*]] = phi i64 [ [[CALL_RES4]], %entry ]
1154+ // CHECK: br label %[[COMMON_RET:.*]]
1155+ // CHECK: [[COMMON_RET]]:
1156+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1157+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1158+ // CHECK: [[RETVAL2:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES2]], %[[SUCCESS]] ]
1159+ // CHECK: [[RETVAL3:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES3]], %[[SUCCESS]] ]
1160+ // CHECK: [[RETVAL4:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES4]], %[[SUCCESS]] ]
1161+ // CHECK: store i64 [[RETVAL0]], ptr %.elt{{.*}}, align 8
1162+ // CHECK: store i64 [[RETVAL1]], ptr %.elt{{.*}}, align 8
1163+ // CHECK: store i64 [[RETVAL2]], ptr %.elt{{.*}}, align 8
1164+ // CHECK: store i64 [[RETVAL3]], ptr %.elt{{.*}}, align 8
1165+ // CHECK: store i64 [[RETVAL4]], ptr %.elt{{.*}}, align 8
1166+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}})
1167+ // CHECK: unreachable
1168+ // CHECK: [[SET_ERROR]]:
1169+ // CHECK: store ptr null, ptr %swifterror1, align 8
1170+ // CHECK: br label %[[COMMON_RET]]
1171+ // CHECK: }
1172+ @available ( SwiftStdlib 6 . 0 , * )
1173+ func callImplAsync_f5( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int , Int , Int , Int ) {
1174+ do {
1175+ return try await impl. f5 ( b)
1176+ } catch {
1177+ return ( 0 , 0 , 0 , 0 , 0 )
1178+ }
1179+ }
1180+
9351181protocol P {
9361182 // CHECK: define hidden swiftcc void @"$s16typed_throws_abi1PP2f0yySbAA5EmptyVYKFTj"(i1 %0, ptr noalias swiftself %1, ptr noalias nocapture swifterror dereferenceable(8) %2, ptr %3, ptr %4)
9371183 // CHECK: [[ERROR:%.*]] = load ptr, ptr %2
0 commit comments