@@ -1178,6 +1178,264 @@ func callImplAsync_f5(_ impl: ImplAsync, _ b: Bool) async -> (Int, Int, Int, Int
11781178 }
11791179}
11801180
1181+
1182+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_g0ySiAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1183+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1184+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_g0ySiAA0eF0V_SbtYaFTu")
1185+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1186+ // CHECK: store ptr null, ptr %swifterror, align 8
1187+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1188+ // 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)
1189+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { ptr, i64, ptr } [[CALL_RES]], 1
1190+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, ptr } [[CALL_RES]], 2
1191+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1192+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1193+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1194+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1195+ // CHECK: typed.error.load:
1196+ // CHECK: br label %[[SET_ERROR:.*]]
1197+ // CHECK: [[SUCCESS]]:
1198+ // CHECK: br label %[[COMMON_RET:.*]]
1199+ // CHECK: [[COMMON_RET]]:
1200+ // CHECK: [[RETVAL:%.*]] = phi i64 [ [[ERROR_RES:%.*]], %[[SET_ERROR]] ], [ 1, %[[SUCCESS]] ]
1201+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL]])
1202+ // CHECK: unreachable
1203+ // CHECK: [[SET_ERROR]]:
1204+ // CHECK: [[ERROR_RES]] = phi i64 [ [[CALL_RES0]], %typed.error.load ]
1205+ // CHECK: store ptr null, ptr %swifterror, align 8
1206+ // CHECK: br label %[[COMMON_RET]]
1207+ // CHECK: }
1208+ @available ( SwiftStdlib 6 . 0 , * )
1209+ func callImplAsync_g0( _ impl: ImplAsync , _ b: Bool ) async -> Int {
1210+ do {
1211+ try await impl. g0 ( b)
1212+ return 1
1213+ } catch {
1214+ return error. x
1215+ }
1216+ }
1217+
1218+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_g1ySiAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1219+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1220+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_g1ySiAA0eF0V_SbtYaFTu")
1221+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1222+ // CHECK: store ptr null, ptr %swifterror, align 8
1223+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1224+ // 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)
1225+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { ptr, i64, ptr } [[CALL_RES]], 1
1226+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, ptr } [[CALL_RES]], 2
1227+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1228+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1229+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1230+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1231+ // CHECK: typed.error.load:
1232+ // CHECK: br label %[[SET_ERROR:.*]]
1233+ // CHECK: [[SUCCESS]]:
1234+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1235+ // CHECK: br label %[[COMMON_RET:.*]]
1236+ // CHECK: [[COMMON_RET]]:
1237+ // CHECK: [[RETVAL:%.*]] = phi i64 [ [[ERROR_RES:%.*]], %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1238+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL]])
1239+ // CHECK: unreachable
1240+ // CHECK: [[SET_ERROR]]:
1241+ // CHECK: [[ERROR_RES]] = phi i64 [ [[CALL_RES0]], %typed.error.load ]
1242+ // CHECK: store ptr null, ptr %swifterror, align 8
1243+ // CHECK: br label %[[COMMON_RET]]
1244+ // CHECK: }
1245+ @available ( SwiftStdlib 6 . 0 , * )
1246+ func callImplAsync_g1( _ impl: ImplAsync , _ b: Bool ) async -> Int {
1247+ do {
1248+ return try await impl. g1 ( b)
1249+ } catch {
1250+ return error. x
1251+ }
1252+ }
1253+
1254+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_g2ySi_SitAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1255+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1256+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_g2ySi_SitAA0eF0V_SbtYaFTu")
1257+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1258+ // CHECK: store ptr null, ptr %swifterror, align 8
1259+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1260+ // 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)
1261+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { i64, i64 } {{%.*}}, 0
1262+ // CHECK: [[CALL_RES1:%.*]] = extractvalue { i64, i64 } {{%.*}}, 1
1263+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, i64, ptr } [[CALL_RES]], 3
1264+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1265+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1266+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1267+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1268+ // CHECK: typed.error.load:
1269+ // CHECK: br label %[[SET_ERROR:.*]]
1270+ // CHECK: [[SUCCESS]]:
1271+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1272+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1273+ // CHECK: br label %[[COMMON_RET:.*]]
1274+ // CHECK: [[COMMON_RET]]:
1275+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ [[ERROR_RES:%.*]], %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1276+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1277+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL0]], i64 [[RETVAL1]])
1278+ // CHECK: unreachable
1279+ // CHECK: [[SET_ERROR]]:
1280+ // CHECK: [[ERROR_RES]] = phi i64 [ [[CALL_RES0]], %typed.error.load ]
1281+ // CHECK: store ptr null, ptr %swifterror, align 8
1282+ // CHECK: br label %[[COMMON_RET]]
1283+ // CHECK: }
1284+ @available ( SwiftStdlib 6 . 0 , * )
1285+ func callImplAsync_g2( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int ) {
1286+ do {
1287+ return try await impl. g2 ( b)
1288+ } catch {
1289+ return ( error. x, 0 )
1290+ }
1291+ }
1292+
1293+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_g3ySi_S2itAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1294+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1295+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_g3ySi_S2itAA0eF0V_SbtYaFTu")
1296+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1297+ // CHECK: store ptr null, ptr %swifterror, align 8
1298+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1299+ // 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)
1300+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { i64, i64, i64 } {{%.*}}, 0
1301+ // CHECK: [[CALL_RES1:%.*]] = extractvalue { i64, i64, i64 } {{%.*}}, 1
1302+ // CHECK: [[CALL_RES2:%.*]] = extractvalue { i64, i64, i64 } {{%.*}}, 2
1303+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, i64, i64, ptr } [[CALL_RES]], 4
1304+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1305+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1306+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1307+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1308+ // CHECK: typed.error.load:
1309+ // CHECK: br label %[[SET_ERROR:.*]]
1310+ // CHECK: [[SUCCESS]]:
1311+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1312+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1313+ // CHECK: [[SUCCESS_RES2:%.*]] = phi i64 [ [[CALL_RES2]], %entry ]
1314+ // CHECK: br label %[[COMMON_RET:.*]]
1315+ // CHECK: [[COMMON_RET]]:
1316+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ [[ERROR_RES:%.*]], %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1317+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1318+ // CHECK: [[RETVAL2:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES2]], %[[SUCCESS]] ]
1319+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL0]], i64 [[RETVAL1]], i64 [[RETVAL2]])
1320+ // CHECK: unreachable
1321+ // CHECK: [[SET_ERROR]]:
1322+ // CHECK: [[ERROR_RES]] = phi i64 [ [[CALL_RES0]], %typed.error.load ]
1323+ // CHECK: store ptr null, ptr %swifterror, align 8
1324+ // CHECK: br label %[[COMMON_RET]]
1325+ // CHECK: }
1326+ @available ( SwiftStdlib 6 . 0 , * )
1327+ func callImplAsync_g3( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int , Int ) {
1328+ do {
1329+ return try await impl. g3 ( b)
1330+ } catch {
1331+ return ( error. x, 0 , 0 )
1332+ }
1333+ }
1334+
1335+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_g4ySi_S3itAA0eF0V_SbtYaF"(ptr swiftasync %0, i1 %1)
1336+ // CHECK: %swifterror = alloca swifterror ptr, align 8
1337+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 0, ptr @"$s16typed_throws_abi16callImplAsync_g4ySi_S3itAA0eF0V_SbtYaFTu")
1338+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1339+ // CHECK: store ptr null, ptr %swifterror, align 8
1340+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1341+ // 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)
1342+ // CHECK: [[CALL_RES0:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 0
1343+ // CHECK: [[CALL_RES1:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 1
1344+ // CHECK: [[CALL_RES2:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 2
1345+ // CHECK: [[CALL_RES3:%.*]] = extractvalue { i64, i64, i64, i64 } {{%.*}}, 3
1346+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, i64, i64, i64, i64, ptr } [[CALL_RES]], 5
1347+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror, align 8
1348+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror, align 8
1349+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1350+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1351+ // CHECK: typed.error.load:
1352+ // CHECK: br label %[[SET_ERROR:.*]]
1353+ // CHECK: [[SUCCESS]]:
1354+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1355+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1356+ // CHECK: [[SUCCESS_RES2:%.*]] = phi i64 [ [[CALL_RES2]], %entry ]
1357+ // CHECK: [[SUCCESS_RES3:%.*]] = phi i64 [ [[CALL_RES3]], %entry ]
1358+ // CHECK: br label %[[COMMON_RET:.*]]
1359+ // CHECK: [[COMMON_RET]]:
1360+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ [[ERROR_RES:%.*]], %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1361+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1362+ // CHECK: [[RETVAL2:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES2]], %[[SUCCESS]] ]
1363+ // CHECK: [[RETVAL3:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES3]], %[[SUCCESS]] ]
1364+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}}, i64 [[RETVAL0]], i64 [[RETVAL1]], i64 [[RETVAL2]], i64 [[RETVAL3]])
1365+ // CHECK: unreachable
1366+ // CHECK: [[SET_ERROR]]:
1367+ // CHECK: [[ERROR_RES]] = phi i64 [ [[CALL_RES0]], %typed.error.load ]
1368+ // CHECK: store ptr null, ptr %swifterror, align 8
1369+ // CHECK: br label %[[COMMON_RET]]
1370+ // CHECK: }
1371+ @available ( SwiftStdlib 6 . 0 , * )
1372+ func callImplAsync_g4( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int , Int , Int ) {
1373+ do {
1374+ return try await impl. g4 ( b)
1375+ } catch {
1376+ return ( error. x, 0 , 0 , 0 )
1377+ }
1378+ }
1379+
1380+
1381+ // CHECK: define hidden swifttailcc void @"$s16typed_throws_abi16callImplAsync_g5ySi_S4itAA0eF0V_SbtYaF"(ptr noalias nocapture %0, ptr swiftasync %1, i1 %2)
1382+ // CHECK: %swifterror = alloca %T16typed_throws_abi7OneWordV, align 8
1383+ // CHECK: %call.aggresult = alloca <{ %TSi, %TSi, %TSi, %TSi, %TSi }>, align 8
1384+ // CHECK: %swifterror1 = alloca swifterror ptr, align 8
1385+ // CHECK: [[CALL:%.*]] = call token @llvm.coro.id.async(i32 16, i32 16, i32 1, ptr @"$s16typed_throws_abi16callImplAsync_g5ySi_S4itAA0eF0V_SbtYaFTu")
1386+ // CHECK: [[CORO:%.*]] = call ptr @llvm.coro.begin(token [[CALL]], ptr null)
1387+ // CHECK: store ptr null, ptr %swifterror1, align 8
1388+ // CHECK: [[CORO_RESUME:%.*]] = call ptr @llvm.coro.async.resume()
1389+ // 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)
1390+ // CHECK: [[ERROR_FLAG:%.*]] = extractvalue { ptr, ptr } [[CALL_RES]], 1
1391+ // CHECK: store ptr [[ERROR_FLAG]], ptr %swifterror1, align 8
1392+ // CHECK: [[CALL_RES0:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1393+ // CHECK: [[CALL_RES1:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1394+ // CHECK: [[CALL_RES2:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1395+ // CHECK: [[CALL_RES3:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1396+ // CHECK: [[CALL_RES4:%.*]] = load i64, ptr %call.aggresult.elt{{.*}}, align 8
1397+ // CHECK: [[ERROR:%.*]] = load ptr, ptr %swifterror1, align 8
1398+ // CHECK: [[ISERROR:%.*]] = icmp ne ptr [[ERROR]], null
1399+ // CHECK: br i1 [[ISERROR]], label %typed.error.load, label %[[SUCCESS:.*]]
1400+ // CHECK: typed.error.load:
1401+ // CHECK: %swifterror.x = getelementptr inbounds %T16typed_throws_abi7OneWordV, ptr %swifterror, i32 0, i32 0
1402+ // CHECK: %swifterror.x._value = getelementptr inbounds %TSi, ptr %swifterror.x, i32 0, i32 0
1403+ // CHECK: [[ERROR_X:%.*]] = load i64, ptr %swifterror.x._value, align 8
1404+ // CHECK: br label %[[SET_ERROR:.*]]
1405+ // CHECK: [[SUCCESS]]:
1406+ // CHECK: [[SUCCESS_RES0:%.*]] = phi i64 [ [[CALL_RES0]], %entry ]
1407+ // CHECK: [[SUCCESS_RES1:%.*]] = phi i64 [ [[CALL_RES1]], %entry ]
1408+ // CHECK: [[SUCCESS_RES2:%.*]] = phi i64 [ [[CALL_RES2]], %entry ]
1409+ // CHECK: [[SUCCESS_RES3:%.*]] = phi i64 [ [[CALL_RES3]], %entry ]
1410+ // CHECK: [[SUCCESS_RES4:%.*]] = phi i64 [ [[CALL_RES4]], %entry ]
1411+ // CHECK: br label %[[COMMON_RET:.*]]
1412+ // CHECK: [[COMMON_RET]]:
1413+ // CHECK: [[RETVAL0:%.*]] = phi i64 [ [[ERROR_RES0:%.*]], %[[SET_ERROR]] ], [ [[SUCCESS_RES0]], %[[SUCCESS]] ]
1414+ // CHECK: [[RETVAL1:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES1]], %[[SUCCESS]] ]
1415+ // CHECK: [[RETVAL2:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES2]], %[[SUCCESS]] ]
1416+ // CHECK: [[RETVAL3:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES3]], %[[SUCCESS]] ]
1417+ // CHECK: [[RETVAL4:%.*]] = phi i64 [ 0, %[[SET_ERROR]] ], [ [[SUCCESS_RES4]], %[[SUCCESS]] ]
1418+ // CHECK: store i64 [[RETVAL0]], ptr %.elt{{.*}}, align 8
1419+ // CHECK: store i64 [[RETVAL1]], ptr %.elt{{.*}}, align 8
1420+ // CHECK: store i64 [[RETVAL2]], ptr %.elt{{.*}}, align 8
1421+ // CHECK: store i64 [[RETVAL3]], ptr %.elt{{.*}}, align 8
1422+ // CHECK: store i64 [[RETVAL4]], ptr %.elt{{.*}}, align 8
1423+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async(ptr [[CORO]], i1 false, ptr @"{{.*}}", ptr {{%.*}}, ptr {{%.*}})
1424+ // CHECK: unreachable
1425+ // CHECK: [[SET_ERROR]]:
1426+ // CHECK [[ERROR_RES0]] = phi i64 [ [[ERROR_X]], %typed.error.load ]
1427+ // CHECK: store ptr null, ptr %swifterror1, align 8
1428+ // CHECK: br label %[[COMMON_RET]]
1429+ // CHECK: }
1430+ @available ( SwiftStdlib 6 . 0 , * )
1431+ func callImplAsync_g5( _ impl: ImplAsync , _ b: Bool ) async -> ( Int , Int , Int , Int , Int ) {
1432+ do {
1433+ return try await impl. g5 ( b)
1434+ } catch {
1435+ return ( error. x, 0 , 0 , 0 , 0 )
1436+ }
1437+ }
1438+
11811439protocol P {
11821440 // 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)
11831441 // CHECK: [[ERROR:%.*]] = load ptr, ptr %2
0 commit comments