Hi, the attached patch fixes a problem which has been introduced with: http://gcc.gnu.org/ml/gcc-patches/2011-03/msg01527.html
Bootstrapped and regtested on x86_64, s390, and s390x. Ok for mainline? Bye, -Andreas- 2012-01-19 Andreas Krebbel <andreas.kreb...@de.ibm.com> PR rtl-optimization/51856 * reload.c (find_reloads_subreg_address): Set the address_reloaded flag to reloaded. 2012-01-19 Andreas Krebbel <andreas.kreb...@de.ibm.com> * gcc.c-torture/compile/pr51856.c: New testcase. --- gcc/reload.c | 2 !! gcc/testsuite/gcc.c-torture/compile/pr51856.c | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 modifications(!) Index: gcc/reload.c =================================================================== *** gcc/reload.c.orig --- gcc/reload.c *************** find_reloads_subreg_address (rtx x, int *** 6232,6238 **** } } if (reloaded && address_reloaded) ! *address_reloaded = 1; return x; } --- 6232,6238 ---- } } if (reloaded && address_reloaded) ! *address_reloaded = reloaded; return x; } Index: gcc/testsuite/gcc.c-torture/compile/pr51856.c =================================================================== *** /dev/null --- gcc/testsuite/gcc.c-torture/compile/pr51856.c *************** *** 0 **** --- 1,23 ---- + struct B { int b1; long long b2, b3; int b4; }; + struct C { char c1[40], c2, c3[96]; long long c4[5], c5; char c6[596]; }; + void fn1 (long long), fn2 (char *, int), fn4 (void); + int r, fn3 (int, const char *, int, char *, int, int); + + void + foo (int t, int u, int v, int w, int x, int y, struct B *z) + { + char c[512], d[512], e; + struct C g; + long long f, h[255]; + struct B j; + __builtin_bzero (&j, sizeof j); + if (y > w) + fn4 (); + __builtin_bzero (&g, sizeof g); + g.c5 = h[0]; + fn1 (z ? z->b3 : f); + g.c2 = y; + fn2 (d, 256); + if (fn3 (r, "", e, c, 0, 16)) + fn4 (); + }