1; RUN: llc -mtriple=x86_64-pc-windows-coreclr < %s | FileCheck %s
2
3declare void @ProcessCLRException()
4
5declare void @f()
6
7define void @test1() personality void ()* @ProcessCLRException {
8entry:
9  invoke void @f()
10          to label %exit unwind label %outer.pad
11outer.pad:
12  %outer = catchpad [i32 1]
13          to label %outer.catch unwind label %outer.end
14outer.catch:
15  invoke void @f()
16          to label %outer.ret unwind label %inner.pad
17inner.pad:
18  %inner = catchpad [i32 2]
19          to label %inner.ret unwind label %inner.end
20inner.ret:
21  catchret %inner to label %outer.ret
22inner.end:
23  catchendpad unwind label %outer.end
24outer.ret:
25  catchret %outer to label %exit
26outer.end:
27  catchendpad unwind to caller
28exit:
29  ret void
30}
31
32; Check the catchret targets
33; CHECK-LABEL: test1: # @test1
34; CHECK: [[Exit:^[^: ]+]]: # Block address taken
35; CHECK-NEXT:              # %exit
36; CHECK: [[OuterRet:^[^: ]+]]: # Block address taken
37; CHECK-NEXT:                  # %outer.ret
38; CHECK-NEXT: leaq [[Exit]](%rip), %rax
39; CHECK:      retq   # CATCHRET
40; CHECK: {{^[^: ]+}}: # %inner.pad
41; CHECK: .seh_endprolog
42; CHECK-NEXT: leaq [[OuterRet]](%rip), %rax
43; CHECK:      retq   # CATCHRET
44