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