blob: d0dcbc4524b9e4c46c241b9a900f313f4fa3bfc6 [file] [log] [blame]
/* { dg-require-effective-target freorder } */
/* { dg-options "-O2 -freorder-blocks-and-partition" } */
struct A { A () __attribute__((noinline)); ~A () __attribute__((noinline)); };
A::A () { asm volatile ("" : : : "memory"); }
A::~A () { asm volatile ("" : : : "memory"); }
int bar () __attribute__((noinline));
void foo () __attribute__((noinline));
volatile int k, l;
int bar (int i)
{
void *p = __builtin_alloca (i);
asm volatile ("" : : "r" (i), "r" (p) : "memory");
if (k) throw 6;
return ++l;
}
void foo ()
{
A a;
try {
A b;
int i = bar (5);
try { throw 6; } catch (int) {}
if (__builtin_expect (i < 4500, 0)) {
bar (7);
try { bar (8); } catch (long) {}
bar (10);
if (__builtin_expect (i < 0, 0)) {
try { bar (12); } catch (...) {}
bar (16);
bar (122);
} else {
try { bar (bar (7)); } catch (int) {}
}
} else {
try { bar (bar (bar (9))); } catch (...) {}
bar (5);
}
} catch (...) {
}
}
int
main ()
{
int i;
for (i = 0; i < 10000; i++)
foo ();
}