re PR c++/91110 (ICE: tree check: expected class 'type', have 'exceptional' (error_ma...
authorJakub Jelinek <jakub@redhat.com>
Mon, 8 Jul 2019 22:08:27 +0000 (00:08 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 8 Jul 2019 22:08:27 +0000 (00:08 +0200)
PR c++/91110
* decl2.c (cp_omp_mappable_type_1): Don't emit any note for
error_mark_node type.

* g++.dg/gomp/pr91110.C: New test.

From-SVN: r273248

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr91110.C [new file with mode: 0644]

index 1967c9b32b546c19150288e78f98cc6f1fd2d749..0fcbfe507e13ee5c53cbb359562285db61c36d50 100644 (file)
@@ -1,3 +1,9 @@
+2019-07-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/91110
+       * decl2.c (cp_omp_mappable_type_1): Don't emit any note for
+       error_mark_node type.
+
 2019-07-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/67184
index b415716c7dda6069fd575bfb786428fad34ffd33..3aba194d824eb5a568f72984b5eb1a5d7086871e 100644 (file)
@@ -1416,7 +1416,7 @@ cp_omp_mappable_type_1 (tree type, bool notes)
   /* Mappable type has to be complete.  */
   if (type == error_mark_node || !COMPLETE_TYPE_P (type))
     {
-      if (notes)
+      if (notes && type != error_mark_node)
        {
          tree decl = TYPE_MAIN_DECL (type);
          inform ((decl ? DECL_SOURCE_LOCATION (decl) : input_location),
index a78c745150bac8ab58743188964ecce4ad13897f..3e24415db8540beb3b01fb9f722e57f6a5e94551 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/91110
+       * g++.dg/gomp/pr91110.C: New test.
+
 2019-07-08  Segher Boessenkool  <segher@kernel.crashing.org>
 
        PR rtl-optimization/88233
diff --git a/gcc/testsuite/g++.dg/gomp/pr91110.C b/gcc/testsuite/g++.dg/gomp/pr91110.C
new file mode 100644 (file)
index 0000000..332c99a
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/91110
+// { dg-do compile }
+
+void
+foo ()
+{
+  X b[2];      // { dg-error "'X' was not declared in this scope" }
+  b[0] = 1;    // { dg-error "'b' was not declared in this scope" }
+  #pragma omp target map(to: b)        // { dg-error "'b' does not have a mappable type in 'map' clause" }
+  ;
+}