aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-04-21 12:09:20 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-04-21 12:09:20 +0000
commitbb1bc604a852c38afd0df9d2f6a66a0e1a80db34 (patch)
treeefe1044f9d6c29374fada2b86514b9f58dab0c3b /gcc/fold-const.c
parente1478a0ee96f0273a36384cecb1376597fd4218f (diff)
downloadgcc-bb1bc604a852c38afd0df9d2f6a66a0e1a80db34.zip
gcc-bb1bc604a852c38afd0df9d2f6a66a0e1a80db34.tar.gz
gcc-bb1bc604a852c38afd0df9d2f6a66a0e1a80db34.tar.bz2
re PR tree-optimization/78847 (pointer arithmetic from c++ ranged-based for loop not optimized)
2017-04-21 Richard Biener <rguenther@suse.de> PR tree-optimization/78847 * fold-const.c (split_tree): Handle POINTER_PLUS_EXPR. * g++.dg/tree-ssa/pr78847.C: New testcase. From-SVN: r247061
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 7701622..4ae21fb 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -798,8 +798,11 @@ split_tree (location_t loc, tree in, tree type, enum tree_code code,
though the C standard doesn't say so) for integers because
the value is not affected. For reals, the value might be
affected, so we can't. */
- && ((code == PLUS_EXPR && TREE_CODE (in) == MINUS_EXPR)
- || (code == MINUS_EXPR && TREE_CODE (in) == PLUS_EXPR))))
+ && ((code == PLUS_EXPR && TREE_CODE (in) == POINTER_PLUS_EXPR)
+ || (code == PLUS_EXPR && TREE_CODE (in) == MINUS_EXPR)
+ || (code == MINUS_EXPR
+ && (TREE_CODE (in) == PLUS_EXPR
+ || TREE_CODE (in) == POINTER_PLUS_EXPR)))))
{
tree op0 = TREE_OPERAND (in, 0);
tree op1 = TREE_OPERAND (in, 1);