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