@@ -1334,3 +1334,63 @@ cleanup4:
1334
1334
br label %while.body
1335
1335
}
1336
1336
1337
+ declare void @throw (i1 )
1338
+
1339
+ define void @wineh_test (i64 %val ) personality i32 (...)* @__CxxFrameHandler3 {
1340
+ entry:
1341
+ invoke void @throw (i1 false )
1342
+ to label %unreachable unwind label %cleanup1
1343
+
1344
+ unreachable:
1345
+ unreachable
1346
+
1347
+ cleanup1:
1348
+ %cleanuppad1 = cleanuppad within none []
1349
+ switch i64 %val , label %cleanupdone2 [
1350
+ i64 0 , label %cleanupdone1
1351
+ i64 1 , label %cleanupdone1
1352
+ i64 6 , label %cleanupdone1
1353
+ ]
1354
+
1355
+ cleanupdone1:
1356
+ cleanupret from %cleanuppad1 unwind label %cleanup2
1357
+
1358
+ cleanupdone2:
1359
+ cleanupret from %cleanuppad1 unwind label %cleanup2
1360
+
1361
+ cleanup2:
1362
+ %phi = phi i1 [ true , %cleanupdone1 ], [ false , %cleanupdone2 ]
1363
+ %cleanuppad2 = cleanuppad within none []
1364
+ call void @throw (i1 %phi ) [ "funclet" (token %cleanuppad2 ) ]
1365
+ unreachable
1366
+ }
1367
+
1368
+ ; CHECK-LABEL: @wineh_test(
1369
+ ; CHECK: entry:
1370
+ ; CHECK: invoke void @throw(i1 false)
1371
+ ; CHECK: to label %[[unreachable:.*]] unwind label %[[cleanup1:.*]]
1372
+
1373
+ ; CHECK: [[unreachable]]:
1374
+ ; CHECK: unreachable
1375
+
1376
+ ; CHECK: [[cleanup1]]:
1377
+ ; CHECK: %[[cleanuppad1:.*]] = cleanuppad within none []
1378
+ ; CHECK: switch i64 %val, label %[[cleanupdone2:.*]] [
1379
+ ; CHECK: i64 0, label %[[cleanupdone1:.*]]
1380
+ ; CHECK: i64 1, label %[[cleanupdone1]]
1381
+ ; CHECK: i64 6, label %[[cleanupdone1]]
1382
+ ; CHECK: ]
1383
+
1384
+ ; CHECK: [[cleanupdone1]]:
1385
+ ; CHECK: cleanupret from %[[cleanuppad1]] unwind label %[[cleanup2:.*]]
1386
+
1387
+ ; CHECK: [[cleanupdone2]]:
1388
+ ; CHECK: cleanupret from %[[cleanuppad1]] unwind label %[[cleanup2]]
1389
+
1390
+ ; CHECK: [[cleanup2]]:
1391
+ ; CHECK: %[[phi:.*]] = phi i1 [ true, %[[cleanupdone1]] ], [ false, %[[cleanupdone2]] ]
1392
+ ; CHECK: %[[cleanuppad2:.*]] = cleanuppad within none []
1393
+ ; CHECK: call void @throw(i1 %[[phi]]) [ "funclet"(token %[[cleanuppad2]]) ]
1394
+ ; CHECK: unreachable
1395
+
1396
+ declare i32 @__CxxFrameHandler3 (...)
0 commit comments