Skip to content

Commit 5b46045

Browse files
committed
[Test] Add async throwing non-empty error tests to IRGen/typed_throws_abi.swift
1 parent 03c3d98 commit 5b46045

File tree

1 file changed

+258
-0
lines changed

1 file changed

+258
-0
lines changed

test/IRGen/typed_throws_abi.swift

Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
11811439
protocol 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

Comments
 (0)