aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-08-21 09:18:15 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-08-21 09:18:15 +0000
commitf7d1e0c6cb12146eaddeac1386e1a5b9394f5955 (patch)
treeda8009658e74e845d6bc8c65006d9ea505a606a8 /gcc
parent8015455a87e3e516d3238fb3231ab50214234289 (diff)
downloadgcc-f7d1e0c6cb12146eaddeac1386e1a5b9394f5955.zip
gcc-f7d1e0c6cb12146eaddeac1386e1a5b9394f5955.tar.gz
gcc-f7d1e0c6cb12146eaddeac1386e1a5b9394f5955.tar.bz2
fold-const.c (fold_binary): Revert removing of index +p PTR
2007-08-21 Richard Guenther <rguenther@suse.de> * fold-const.c (fold_binary): Revert removing of index +p PTR * folding. * gcc.dg/pointer-arith-10.c: New testcase. From-SVN: r127660
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/fold-const.c7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/pointer-arith-10.c10
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8223bdd..aa40fb4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2007-08-21 Richard Guenther <rguenther@suse.de>
+ * fold-const.c (fold_binary): Revert removing of index +p PTR folding.
+
+2007-08-21 Richard Guenther <rguenther@suse.de>
+
PR middle-end/33122
* fold-const.c (fold_binary): Remove index +p PTR folding.
Fix types of POINTER_PLUS_EXPR generated by folding of
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 8faf77d..33467eb 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -9528,6 +9528,13 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
fold_convert (sizetype, arg1),
fold_convert (sizetype, arg0)));
+ /* index +p PTR -> PTR +p index */
+ if (POINTER_TYPE_P (TREE_TYPE (arg1))
+ && INTEGRAL_TYPE_P (TREE_TYPE (arg0)))
+ return fold_build2 (POINTER_PLUS_EXPR, type,
+ fold_convert (type, arg1),
+ fold_convert (sizetype, arg0));
+
/* (PTR +p B) +p A -> PTR +p (B + A) */
if (TREE_CODE (arg0) == POINTER_PLUS_EXPR)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 29500ed8..9f0b0c8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2007-08-21 Richard Guenther <rguenther@suse.de>
+ * gcc.dg/pointer-arith-10.c: New testcase.
+
+2007-08-21 Richard Guenther <rguenther@suse.de>
+
PR middle-end/33122
* gcc.c-torture/compile/pr33122.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/pointer-arith-10.c b/gcc/testsuite/gcc.dg/pointer-arith-10.c
new file mode 100644
index 0000000..220891e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pointer-arith-10.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-tree-original" } */
+
+char *foo(char *p, __SIZE_TYPE__ i)
+{
+ return (char *)i + (__SIZE_TYPE__)p;
+}
+
+/* { dg-final { scan-tree-dump "p +" "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */