From afa73d3a683853785cda51021fae0aef732e630b Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Fri, 20 Jan 2012 16:29:01 +0000 Subject: [PATCH] re PR rtl-optimization/51856 (ICE in reload_cse_simplify_operands) 2012-01-20 Andreas Krebbel PR rtl-optimization/51856 * reload.c (find_reloads_subreg_address): Set the address_reloaded flag to reloaded. 2012-01-20 Andreas Krebbel * gcc.c-torture/compile/pr51856.c: New testcase. From-SVN: r183341 --- gcc/ChangeLog | 6 +++++ gcc/reload.c | 4 ++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.c-torture/compile/pr51856.c | 23 +++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr51856.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 940e361fb7b..45bdc3d1aee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-01-20 Andreas Krebbel + + PR rtl-optimization/51856 + * reload.c (find_reloads_subreg_address): Set the address_reloaded + flag to reloaded. + 2012-01-20 Ramana Radhakrishnan PR target/51819 diff --git a/gcc/reload.c b/gcc/reload.c index 90085bd33da..8420c808073 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -6231,8 +6231,8 @@ find_reloads_subreg_address (rtx x, int force_replace, int opnum, } } } - if (reloaded && address_reloaded) - *address_reloaded = 1; + if (address_reloaded) + *address_reloaded = reloaded; return x; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d0068ba0770..86ae60f117a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-01-20 Andreas Krebbel + + * gcc.c-torture/compile/pr51856.c: New testcase. + 2012-01-20 Uros Bizjak * go.test/go-test.exp (go-gc-tests): Pass correctly formatted diff --git a/gcc/testsuite/gcc.c-torture/compile/pr51856.c b/gcc/testsuite/gcc.c-torture/compile/pr51856.c new file mode 100644 index 00000000000..6644c7fdc14 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr51856.c @@ -0,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 (); +} -- 2.30.2