parser.c (cp_parser_class_head): Improve error recovery upon extra qualification...
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 21 Oct 2019 19:29:41 +0000 (19:29 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 21 Oct 2019 19:29:41 +0000 (19:29 +0000)
/cp
2019-10-21  Paolo Carlini  <paolo.carlini@oracle.com>

* parser.c (cp_parser_class_head): Improve error recovery upon
extra qualification error.

/testsuite
2019-10-21  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/parse/qualified2.C: Tighten dg-error directive.
* g++.old-deja/g++.other/decl5.C: Don't expect redundant error.

From-SVN: r277268

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/qualified2.C
gcc/testsuite/g++.old-deja/g++.other/decl5.C

index 593510ffbf392d5fcf18f4602764ba508f7bd3b5..19a687a4b795b760a610c2b2f0448715c5131af0 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * parser.c (cp_parser_class_head): Improve error recovery upon
+       extra qualification error.
+
 2019-10-21  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/92015
index 450b1447cc1fadfb366434f22eb83fa5c398f214..6433f870b2e249aa7fd956562ecf6d03b1d755c2 100644 (file)
@@ -24178,12 +24178,8 @@ cp_parser_class_head (cp_parser* parser,
         ... [or] the definition or explicit instantiation of a
         class member of a namespace outside of its namespace.  */
       if (scope == nested_name_specifier)
-       {
-         permerror (nested_name_specifier_token_start->location,
-                    "extra qualification not allowed");
-         nested_name_specifier = NULL_TREE;
-         num_templates = 0;
-       }
+       permerror (nested_name_specifier_token_start->location,
+                  "extra qualification not allowed");
     }
   /* An explicit-specialization must be preceded by "template <>".  If
      it is not, try to recover gracefully.  */
index 3f4e6c5c8806c0da197f88319f83ab1a048ca695..5aec5cd817a235b3f66ba7633b332e11ce8a2ec3 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/parse/qualified2.C: Tighten dg-error directive.
+       * g++.old-deja/g++.other/decl5.C: Don't expect redundant error.
+
 2019-10-21  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/92015
index c582613c953350541b3e1fec9e0acdbc96908faf..ef1bedb08ecbde533a0ea6dc99ee9b3705980521 100644 (file)
@@ -1,4 +1,4 @@
 namespace Glib {
   template <typename> class Value {};
-  template <>         class Glib::Value<int> {}; // { dg-error "" }
+  template <>         class Glib::Value<int> {}; // { dg-error "29:extra qualification" }
 }
index 6d229325187b18c6abd97a06025f4d023f0c6369..26556aaa7ef51dde2371c8f8633d13be3d8315e1 100644 (file)
@@ -8,11 +8,10 @@
 
 
 struct A {
-  int A::fn();        // { dg-error "extra qualification" } 
-  int A::m;           // { dg-error "extra qualification" } 
+  int A::fn();        // { dg-error "7:extra qualification" } 
+  int A::m;           // { dg-error "7:extra qualification" } 
   struct e;
-  struct A::e {int i;}; // { dg-error "extra qualification" "qual" } 
-  // { dg-error "anonymous struct" "anon" { target *-*-* } .-1 }
+  struct A::e {int i;}; // { dg-error "10:extra qualification" "qual" } 
   struct A::expand {  // { dg-error "qualified name" } 
   int m;
   };