aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-04-29 00:23:01 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-04-29 00:23:01 +0200
commit8b80cc2131a7eb179a75392656b753d51045fb19 (patch)
tree8377c737763a3df6594340ecbe12fc8605d2c3f5 /gcc/fold-const.c
parent9f405ce1b5bc4befcc4c2ac482e92f1662131659 (diff)
downloadgcc-8b80cc2131a7eb179a75392656b753d51045fb19.zip
gcc-8b80cc2131a7eb179a75392656b753d51045fb19.tar.gz
gcc-8b80cc2131a7eb179a75392656b753d51045fb19.tar.bz2
re PR middle-end/70843 (ICE in add_expr, at tree.c:7913)
PR middle-end/70843 * fold-const.c (operand_equal_p): Don't verify hash value equality if arg0 == arg1. * tree.c (inchash::add_expr): Handle STATEMENT_LIST. Ignore BLOCK and OMP_CLAUSE. * gcc.dg/pr70843.c: New test. From-SVN: r235615
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 96d8484..69749a8 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -2756,12 +2756,15 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
{
if (operand_equal_p (arg0, arg1, flags | OEP_NO_HASH_CHECK))
{
- inchash::hash hstate0 (0), hstate1 (0);
- inchash::add_expr (arg0, hstate0, flags);
- inchash::add_expr (arg1, hstate1, flags);
- hashval_t h0 = hstate0.end ();
- hashval_t h1 = hstate1.end ();
- gcc_assert (h0 == h1);
+ if (arg0 != arg1)
+ {
+ inchash::hash hstate0 (0), hstate1 (0);
+ inchash::add_expr (arg0, hstate0, flags);
+ inchash::add_expr (arg1, hstate1, flags);
+ hashval_t h0 = hstate0.end ();
+ hashval_t h1 = hstate1.end ();
+ gcc_assert (h0 == h1);
+ }
return 1;
}
else