aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-04-03 23:42:51 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-03 23:42:51 +0200
commit0d2f7959f7b5fed2f74f5ed1f3e2d7db77bb5361 (patch)
tree52968a0319c6f87b841240b400e66ef4b54f813a /gcc/builtins.c
parent8d0d49f8b457d47539898886e3f94aaee9c572d6 (diff)
downloadgcc-0d2f7959f7b5fed2f74f5ed1f3e2d7db77bb5361.zip
gcc-0d2f7959f7b5fed2f74f5ed1f3e2d7db77bb5361.tar.gz
gcc-0d2f7959f7b5fed2f74f5ed1f3e2d7db77bb5361.tar.bz2
re PR tree-optimization/85156 (ICE with -O1 -g: gimplification failed)
PR tree-optimization/85156 * builtins.c (fold_builtin_expect): Use save_expr on arg1 to avoid evaluating the argument multiple times. * c-c++-common/pr85156.c: New test. * gcc.c-torture/execute/pr85156.c: New test. From-SVN: r259057
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 0c56018..e0f6c2a 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -7998,6 +7998,7 @@ fold_builtin_expect (location_t loc, tree arg0, tree arg1, tree arg2)
{
tree op0 = TREE_OPERAND (inner, 0);
tree op1 = TREE_OPERAND (inner, 1);
+ arg1 = save_expr (arg1);
op0 = build_builtin_expect_predicate (loc, op0, arg1, arg2);
op1 = build_builtin_expect_predicate (loc, op1, arg1, arg2);