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 ();
+ }

Reply via email to