Hi! This PR got fixed some time ago, this patch adds a testcase for it.
2014-12-15 Jakub Jelinek <ja...@redhat.com> PR rtl-optimization/63804 * gcc.dg/pr63804.c: New test. --- gcc/testsuite/gcc.dg/pr63804.c.jj 2014-12-15 17:35:31.978451234 +0100 +++ gcc/testsuite/gcc.dg/pr63804.c 2014-12-15 17:35:16.000000000 +0100 @@ -0,0 +1,52 @@ +/* PR rtl-optimization/63804 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -g" } */ + +struct A { int gen; } e; +int a, d; +long b; +enum B { C }; +struct D +{ + enum B type : 1; + int nr : 1; + struct { unsigned ud; } dw1; +}; +enum B c; + +void +fn1 (int p1) +{ + b = p1 & a; +} + +int fn2 (); +void fn3 (); + +void +fn4 (struct D p1, unsigned p2, int p3) +{ + struct D f, g, h, j = p1, l, m = l; + struct A i = e; + if (i.gen) + p2 = 0; + j.type = c; + g = j; + p1 = g; + fn3 (); + int k = p2, v = p1.nr, p = v; + m.dw1.ud = k; + f = m; + h = f; + struct D n = h; + fn3 (n); + { + d = fn2 (); + int o = d; + fn1 (o); + } + if (i.gen) + fn3 (p1); + b = p & a; + fn3 (p3); +} Jakub