summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2011-03-18 09:04:31 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2011-03-18 09:04:31 +0000
commit9acb0e38ba1db1feb9ca9bcf651dd6edf1fd307f (patch)
tree761f762f0e3c4b243600563c75439b76384a1526
parentee0355ee72f2475f4dfc08786cf22ab95e256571 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr48161.c24
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;
+}