------- Comment #4 from rguenth at gcc dot gnu dot org 2005-11-21 13:40 ------- Old value = 0 New value = 1 check2495 (arg0={a = 27121, b = {c = {d = true, e = 359101392}}}, arg1=0x5019ec, arg2={a = 30216, b = {c = {d = true, e = 1}}}) at t026_y.min.i:71 71 if (arg2.b.c.e != a2495[2].b.c.e) ++fails;
Reduced testcase: void abort(void); struct S2495 { short int a; union{ struct{ _Bool d; int e:31; } c; } b; }; struct S2495 x; void foo(struct S2495 a) __attribute__((noinline)); void foo(struct S2495 a) { if (a.a != x.a) abort(); if (a.b.c.d != x.b.c.d) abort(); if (a.b.c.e != x.b.c.e) abort(); } int main() { x.a = 30216; x.b.c.d = 1; x.b.c.e = 32766; foo(x); return 0; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24969