1; RUN: llc -verify-machineinstrs -mtriple=aarch64-pc-windows-msvc < %s \ 2; RUN: | FileCheck --check-prefix=CHECK %s 3 4; Loosely based on IR for this C++ source code: 5; void f(int p); 6; void try_in_catch() { 7; try { 8; f(1); 9; } catch (...) { 10; try { 11; f(2); 12; } catch (...) { 13; f(3); 14; } 15; } 16; } 17 18declare void @f(i32 %p) 19declare i32 @__CxxFrameHandler3(...) 20 21define i32 @try_in_catch() personality ptr @__CxxFrameHandler3 { 22entry: 23 invoke void @f(i32 1) 24 to label %try.cont unwind label %catch.dispatch.1 25try.cont: 26 ret i32 0 27 28catch.dispatch.1: 29 %cs1 = catchswitch within none [label %handler1] unwind to caller 30handler1: 31 %h1 = catchpad within %cs1 [ptr null, i32 64, ptr null] 32 invoke void @f(i32 2) [ "funclet"(token %h1) ] 33 to label %catchret1 unwind label %catch.dispatch.2 34catchret1: 35 catchret from %h1 to label %try.cont 36 37catch.dispatch.2: 38 %cs2 = catchswitch within %h1 [label %handler2] unwind to caller 39handler2: 40 %h2 = catchpad within %cs2 [ptr null, i32 64, ptr null] 41 call void @f(i32 3) 42 catchret from %h2 to label %catchret1 43} 44 45; CHECK-LABEL: $cppxdata$try_in_catch: 46; CHECK-NEXT: .word 429065506 47; CHECK-NEXT: .word 4 48; CHECK-NEXT: .word ($stateUnwindMap$try_in_catch) 49; CHECK-NEXT: .word 2 50; CHECK-NEXT: .word ($tryMap$try_in_catch) 51; ip2state num + ptr 52; CHECK-NEXT: .word 7 53; CHECK-NEXT: .word ($ip2state$try_in_catch) 54; unwindhelp offset 55; CHECK-NEXT: .word -16 56; CHECK-NEXT: .word 0 57; EHFlags 58; CHECK-NEXT: .word 1 59 60; CHECK-LABEL: $tryMap$try_in_catch: 61; CHECK-NEXT: .word 0 62; CHECK-NEXT: .word 0 63; CHECK-NEXT: .word 3 64; CHECK-NEXT: .word 1 65; CHECK-NEXT: .word ($handlerMap$0$try_in_catch) 66; CHECK-NEXT: .word 2 67; CHECK-NEXT: .word 2 68; CHECK-NEXT: .word 3 69; CHECK-NEXT: .word 1 70; CHECK-NEXT: .word ($handlerMap$1$try_in_catch) 71 72; CHECK: $handlerMap$0$try_in_catch: 73; CHECK-NEXT: .word 64 74; CHECK-NEXT: .word 0 75; CHECK-NEXT: .word 0 76; CHECK-NEXT: .word "?catch${{[0-9]+}}@?0?try_in_catch@4HA" 77; CHECK-NEXT: .word 0 78 79; CHECK: $handlerMap$1$try_in_catch: 80; CHECK-NEXT: .word 64 81; CHECK-NEXT: .word 0 82; CHECK-NEXT: .word 0 83; CHECK-NEXT: .word "?catch${{[0-9]+}}@?0?try_in_catch@4HA" 84; CHECK-NEXT: .word 0 85 86; CHECK: $ip2state$try_in_catch: 87; CHECK-NEXT: .word .Lfunc_begin0@IMGREL 88; CHECK-NEXT: .word -1 89; CHECK-NEXT: .word .Ltmp0@IMGREL 90; CHECK-NEXT: .word 0 91; CHECK-NEXT: .word .Ltmp1@IMGREL 92; CHECK-NEXT: .word -1 93; CHECK-NEXT: .word "?catch$2@?0?try_in_catch@4HA"@IMGREL 94; CHECK-NEXT: .word 1 95; CHECK-NEXT: .word .Ltmp2@IMGREL 96; CHECK-NEXT: .word 2 97; CHECK-NEXT: .word .Ltmp3@IMGREL 98; CHECK-NEXT: .word 1 99; CHECK-NEXT: .word "?catch$4@?0?try_in_catch@4HA"@IMGREL 100; CHECK-NEXT: .word 3 101