// PR middle-end/36449 // { dg-do run } // { dg-options "-O3" } extern "C" void exit (int); extern "C" void abort (); struct R { short a; short b; }; struct S { R e; long f; long g; }; struct T { short c; short d; }; struct U { long h[0x1ffffff + 1]; T i; }; U *j; void __attribute__((noinline)) bar () { exit (0); } void __attribute__((noinline)) foo () { S s; s.e.a = 36; s.e.b = 38; if (s.e.a == j->i.c && s.e.b == j->i.d) bar (); } int main () { try { j = new U; } catch (...) { return 0; } j->i.c = 36; j->i.d = 38; j->h[0] = 1; j->h[1] = 2; j->h[2] = 3; foo (); abort (); }