From 4d20d00a0d94ad1e62a194b6f027e8007ceabc1d Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 21 Aug 2015 08:06:20 +0000 Subject: [PATCH] re PR middle-end/67285 (ICE with (rdiv (POW:s @0 REAL_CST@1) @0)) 2015-08-21 Richard Biener PR middle-end/67285 * gimple-fold.c (replace_stmt_with_simplification): Assert seq is empty when replacing a call with itself but different arguments. * gimple-match-head.c (maybe_push_res_to_seq): When pushing a call require that it is const. From-SVN: r227053 --- gcc/ChangeLog | 9 +++++++++ gcc/gimple-fold.c | 1 + gcc/gimple-match-head.c | 3 +++ 3 files changed, 13 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 20638852b9f..d7c98837060 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-08-21 Richard Biener + + PR middle-end/67285 + * gimple-fold.c (replace_stmt_with_simplification): Assert + seq is empty when replacing a call with itself but different + arguments. + * gimple-match-head.c (maybe_push_res_to_seq): When pushing + a call require that it is const. + 2015-08-20 Trevor Saunders * defaults.h (CONSTANT_ALIGNMENT): New macro definition. diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index de64c053f3a..c79f9b3f436 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -3308,6 +3308,7 @@ replace_stmt_with_simplification (gimple_stmt_iterator *gsi, } if (i < 3) gcc_assert (ops[i] == NULL_TREE); + gcc_assert (gimple_seq_empty_p (*seq)); return true; } else if (!inplace) diff --git a/gcc/gimple-match-head.c b/gcc/gimple-match-head.c index 17bd9926144..90f2486e15c 100644 --- a/gcc/gimple-match-head.c +++ b/gcc/gimple-match-head.c @@ -338,6 +338,9 @@ maybe_push_res_to_seq (code_helper rcode, tree type, tree *ops, tree decl = builtin_decl_implicit (rcode); if (!decl) return NULL_TREE; + /* We can't and should not emit calls to non-const functions. */ + if (!(flags_from_decl_or_type (decl) & ECF_CONST)) + return NULL_TREE; /* Play safe and do not allow abnormals to be mentioned in newly created statements. */ unsigned nargs; -- 2.30.2