aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-06-04 09:27:52 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-06-04 09:27:52 +0200
commit20b11fd41a51d669eec3601571e21e0081f5c5e0 (patch)
tree88fa3aee13c4b4623128a5cdf6ce114ad96b7366 /gcc
parentea4767995f4e2cc46a697e09e954c6649d8cf515 (diff)
downloadgcc-20b11fd41a51d669eec3601571e21e0081f5c5e0.zip
gcc-20b11fd41a51d669eec3601571e21e0081f5c5e0.tar.gz
gcc-20b11fd41a51d669eec3601571e21e0081f5c5e0.tar.bz2
re PR c++/86025 (ICE with -Wduplicated-branches and OpenMP critical)
PR c++/86025 * tree.c (inchash::add_expr): Handle IDENTIFIER_NODE. * c-c++-common/gomp/pr86025.c: New test. From-SVN: r261137
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/gomp/pr86025.c20
-rw-r--r--gcc/tree.c3
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4faeadc..3882e60 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/86025
+ * tree.c (inchash::add_expr): Handle IDENTIFIER_NODE.
+
2018-06-03 Eric Botcazou <ebotcazou@adacore.com>
PR tree-optimization/86034
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c3a9bca..7352e41 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/86025
+ * c-c++-common/gomp/pr86025.c: New test.
+
2018-06-03 Andreas Schwab <schwab@linux-m68k.org>
* gcc.target/powerpc/altivec-7.c: Remove extra brace.
diff --git a/gcc/testsuite/c-c++-common/gomp/pr86025.c b/gcc/testsuite/c-c++-common/gomp/pr86025.c
new file mode 100644
index 0000000..c1c5079
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/pr86025.c
@@ -0,0 +1,20 @@
+/* PR c++/86025 */
+/* { dg-do compile } */
+/* { dg-additional-options "-Wduplicated-branches" } */
+
+int i;
+
+void
+foo (int x)
+{
+ if (x)
+ {
+ #pragma omp critical (foo)
+ i++;
+ }
+ else
+ {
+ #pragma omp critical
+ i++;
+ }
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index 85ce993..2c75953 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -7360,6 +7360,9 @@ add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
inchash::add_expr (TREE_VEC_ELT (t, i), hstate, flags);
return;
+ case IDENTIFIER_NODE:
+ hstate.add_object (IDENTIFIER_HASH_VALUE (t));
+ return;
case FUNCTION_DECL:
/* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
Otherwise nodes that compare equal according to operand_equal_p might