diff options
author | Richard Biener <rguenther@suse.de> | 2017-04-21 12:09:20 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-04-21 12:09:20 +0000 |
commit | bb1bc604a852c38afd0df9d2f6a66a0e1a80db34 (patch) | |
tree | efe1044f9d6c29374fada2b86514b9f58dab0c3b /gcc/fold-const.c | |
parent | e1478a0ee96f0273a36384cecb1376597fd4218f (diff) | |
download | gcc-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.c | 7 |
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); |