/* { dg-do run } */ | |
/* { dg-options "-O2" } */ | |
int printf (const char *, ...); | |
int a, b = 1, d; | |
union U1 | |
{ | |
unsigned int f0; | |
int f1; | |
}; | |
union U2 | |
{ | |
int f2; | |
int f3; | |
} c; | |
int | |
fn1 (int p) | |
{ | |
int t = p && a || p && a && p; | |
return t ? t : a; | |
} | |
unsigned | |
fn2 (union U1 p1, union U2 p2) | |
{ | |
if (p1.f1 <= 0) | |
{ | |
for (; p2.f2;) | |
c.f2 = 0; | |
p2.f2 = fn1 (d); | |
} | |
return p2.f3; | |
} | |
int g = 0; | |
int | |
foo () | |
{ | |
if (b) | |
{ | |
union U1 f = { 0xFFFFFFFFU }; | |
fn2 (f, c); | |
} | |
g = 1; | |
return 0; | |
} | |
int | |
main () | |
{ | |
foo (); | |
if (g == 0) | |
__builtin_abort (); | |
return 0; | |
} |