diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-03-18 09:04:31 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-03-18 09:04:31 +0000 |
commit | 9acb0e38ba1db1feb9ca9bcf651dd6edf1fd307f (patch) | |
tree | 761f762f0e3c4b243600563c75439b76384a1526 | |
parent | ee0355ee72f2475f4dfc08786cf22ab95e256571 (diff) | |
download | gcc-9acb0e38ba1db1feb9ca9bcf651dd6edf1fd307f.tar.gz |
PR bootstrap/48161
* expr.c (expand_expr_addr_expr_1): Use simplify_gen_binary
instead of gen_rtx_PLUS if EXPAND_SUM or EXPAND_INITIALIZER.
* gcc.c-torture/compile/pr48161.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171127 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/expr.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr48161.c | 24 |
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a35c65ebc71..8c54969c375 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-03-18 Richard Henderson <rth@redhat.com> + Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/48161 + * expr.c (expand_expr_addr_expr_1): Use simplify_gen_binary + instead of gen_rtx_PLUS if EXPAND_SUM or EXPAND_INITIALIZER. + 2011-03-17 Richard Guenther <rguenther@suse.de> PR middle-end/48165 diff --git a/gcc/expr.c b/gcc/expr.c index 6a5f74b4210..3295156e139 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6971,7 +6971,7 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode, tmp = convert_memory_address_addr_space (tmode, tmp, as); if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) - result = gen_rtx_PLUS (tmode, result, tmp); + result = simplify_gen_binary (PLUS, tmode, result, tmp); else { subtarget = bitpos ? NULL_RTX : target; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7048bd7d6a0..d3e2687a8e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-03-18 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/48161 + * gcc.c-torture/compile/pr48161.c: New test. + 2011-03-17 Richard Guenther <rguenther@suse.de> PR middle-end/48165 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48161.c b/gcc/testsuite/gcc.c-torture/compile/pr48161.c new file mode 100644 index 00000000000..c454efcd073 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr48161.c @@ -0,0 +1,24 @@ +/* PR bootstrap/48161 */ + +struct T { int u; }; +struct G { int l; int t; int r; }; +struct V { struct G v[10]; }; +struct { struct V b; } *h; +void bar (void); + +struct G * +baz (struct V *x, unsigned y) +{ + return &x->v[y]; +} + +int +foo (struct T *x, struct T *y) +{ + if ((baz (&h->b, y->u)->t ? baz (&h->b, y->u)->t : 0) + - baz (h ? &h->b : 0, x->u)->r + - (baz (h ? &h->b : 0, x->u)->t > 0 ? 5 : 0)) + return 1; + bar (); + return 0; +} |