@@ -932,6 +932,252 @@ struct ImplAsync: PAsync {
932
932
}
933
933
}
934
934
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
+
935
1181
protocol P {
936
1182
// 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)
937
1183
// CHECK: [[ERROR:%.*]] = load ptr, ptr %2
0 commit comments