; RUN: llc -mtriple thumbv7-windows-msvc -o - %s ; XFAIL: * ; FIXME: C++ EH is not supported on thumbv7-windows-msvc yet. ; FIXME: Windows SEH for armv7 does not preserve the frame register R11 in ; handlers. This may affect C++ EH when accessing arguments on the stack in ; functions with stack realignment. ; C++ source: ; struct X { int x[100]; }; ; void f(X x, void (*a)(), void (*g)(int*)) { ; alignas(64) int aligned; ; try { ; a(); ; } catch (...) { ; g(&x.x[11]); ; } ; } %struct.X = type { [100 x i32] } define void @"?f@@YAXUX@@P6AXXZP6AXPAH@Z@Z"(ptr byval(%struct.X) align 4 %x, ptr %a, ptr %g) personality ptr @__CxxFrameHandler3 { entry: %g.addr = alloca ptr, align 4 %a.addr = alloca ptr, align 4 %aligned = alloca i32, align 64 store ptr %g, ptr %g.addr, align 4 store ptr %a, ptr %a.addr, align 4 %0 = load ptr, ptr %a.addr, align 4 invoke void %0() to label %invoke.cont unwind label %catch.dispatch catch.dispatch: ; preds = %entry %1 = catchswitch within none [label %catch] unwind to caller catch: ; preds = %catch.dispatch %2 = catchpad within %1 [ptr null, i32 64, ptr null] %3 = load ptr, ptr %g.addr, align 4 %x1 = getelementptr inbounds nuw %struct.X, ptr %x, i32 0, i32 0 %arrayidx = getelementptr inbounds [100 x i32], ptr %x1, i32 0, i32 11 call void %3(ptr %arrayidx) [ "funclet"(token %2) ] catchret from %2 to label %catchret.dest catchret.dest: ; preds = %catch br label %try.cont try.cont: ; preds = %catchret.dest, %invoke.cont ret void invoke.cont: ; preds = %entry br label %try.cont } declare dso_local arm_aapcs_vfpcc i32 @__CxxFrameHandler3(...) attributes #0 = { uwtable }