// PR rtl-optimization/36419 // { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } // { dg-options "-Os -fasynchronous-unwind-tables -mpreferred-stack-boundary=4" } extern "C" void abort (); int v = -1; unsigned int n; __attribute__((noinline, used)) void foo (int a, int) { if (v < 0) v = ((unsigned long) &a) & 15; else if ((((unsigned long) &a) & 15) != v) abort (); if (n++ == 0) throw 1; } __attribute__((noinline, used)) void baz (int a, int, int, int, int, int, int) { if (v < 0) v = ((unsigned long) &a) & 15; else if ((((unsigned long) &a) & 15) != v) abort (); if (n++ == 0) throw 1; } struct A { A () { }; ~A (); char c[24]; }; __attribute__((noinline)) A::~A () { asm volatile ("" : : : "memory"); } __attribute__((noinline)) void bar () { A a; try { foo (1, 2); baz (3, 4, 5, 6, 7, 8, 9); } catch (...) { } foo (1, 2); baz (3, 4, 5, 6, 7, 8, 9); } int main () { bar (); return 0; }