@@ -1178,6 +1178,264 @@ func callImplAsync_f5(_ impl: ImplAsync, _ b: Bool) async -> (Int, Int, Int, Int
1178
1178
}
1179
1179
}
1180
1180
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
+
1181
1439
protocol P {
1182
1440
// 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)
1183
1441
// CHECK: [[ERROR:%.*]] = load ptr, ptr %2
0 commit comments