|  | ; 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 |