1 /* This bug exists in gcc-2.95, egcs-1.1.2, gcc-2.7.2 and probably
2 every other version as well. */
4 typedef struct int3
{ int a
, b
, c
; } int3
;
9 return (int3
) { 1, 1, 1 };
15 return (int3
) { 0, 0, 0 };
23 /* gcc allocates a temporary for the inner expression statement
24 to store the return value of `one'.
26 gcc frees the temporaries for the inner expression statement.
28 gcc realloates the same temporary slot to store the return
31 gcc expands the call to zero ahead of the expansion of the
32 statement expressions. The temporary gets the value of `zero'.
34 gcc expands statement expressions and the stale temporary is
35 clobbered with the value of `one'. The bad value is copied from
36 the temporary into *&a. */
38 *({ ({ one (); &a
; }); }) = zero ();
39 if (a
.a
&& a
.b
&& a
.c
)