; RUN: llc -mtriple=x86_64-pc-windows-coreclr < %s | FileCheck %s declare void @ProcessCLRException() declare void @f() define void @test1() personality void ()* @ProcessCLRException { entry: invoke void @f() to label %exit unwind label %catch.dispatch.1 exit: ret void catch.dispatch.1: %cs1 = catchswitch within none [label %outer.catch] unwind to caller outer.catch: %cp1 = catchpad within %cs1 [i32 1] invoke void @f() [ "funclet"(token %cp1) ] to label %outer.ret unwind label %catch.dispatch.2 outer.ret: catchret from %cp1 to label %exit catch.dispatch.2: %cs2 = catchswitch within %cp1 [label %inner.catch] unwind to caller inner.catch: %cp2 = catchpad within %cs2 [i32 2] catchret from %cp2 to label %outer.ret } ; Check the catchret targets ; CHECK-LABEL: test1: # @test1 ; CHECK: [[Exit:^[^: ]+]]: # Block address taken ; CHECK-NEXT: # %exit ; CHECK: [[OuterRet:^[^: ]+]]: # Block address taken ; CHECK-NEXT: # %outer.ret ; CHECK-NEXT: leaq [[Exit]](%rip), %rax ; CHECK: retq # CATCHRET ; CHECK: {{^[^: ]+}}: # %inner.catch ; CHECK: .seh_endprolog ; CHECK-NEXT: leaq [[OuterRet]](%rip), %rax ; CHECK: retq # CATCHRET