71 lines
668 B
C
71 lines
668 B
C
// 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 ();
|
|
}
|