• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -prune-eh -S < %s | FileCheck %s
2target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
3target triple = "i386-pc-windows-msvc"
4
5declare void @neverthrows() nounwind
6
7define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
8  invoke void @neverthrows()
9          to label %try.cont unwind label %cleanuppad
10
11try.cont:
12  ret void
13
14cleanuppad:
15  %cp = cleanuppad within none []
16  br label %cleanupret
17
18cleanupret:
19  cleanupret from %cp unwind to caller
20}
21
22; CHECK-LABEL: define void @test1(
23; CHECK: call void @neverthrows()
24
25; CHECK: %[[cp:.*]] = cleanuppad within none []
26; CHECK-NEXT: unreachable
27
28; CHECK: cleanupret from %[[cp]] unwind to caller
29
30define void @test2() personality i32 (...)* @__CxxFrameHandler3 {
31  invoke void @neverthrows()
32          to label %try.cont unwind label %catchswitch
33
34try.cont:
35  ret void
36
37catchswitch:
38  %cs = catchswitch within none [label %catchpad] unwind to caller
39
40catchpad:
41  %cp = catchpad within %cs []
42  unreachable
43
44ret:
45  ret void
46}
47
48; CHECK-LABEL: define void @test2(
49; CHECK: call void @neverthrows()
50
51; CHECK: %[[cs:.*]] = catchswitch within none [label
52
53; CHECK: catchpad within %[[cs]] []
54; CHECK-NEXT: unreachable
55
56declare i32 @__CxxFrameHandler3(...)
57