Hi,

the following patch adds fix-it information for a diagnostic in the C++
parser: Use a scope operator instead of a single colon in a
nested-name-specifier.

Bootstrapped and regtested on x86_64-pc-linux-gnu.

OK for trunk?

Regards,
Volker


2017-04-26  Volker Reichelt  <v.reich...@netcologne.de>

        * parser.c (cp_parser_nested_name_specifier_opt): Add fix-it
        information to diagnostic of invalid colon in nested-name-specifier.

Index: gcc/cp/parser.c
===================================================================
--- gcc/cp/parser.c     (revision 247254)
+++ gcc/cp/parser.c     (working copy)
@@ -5931,8 +5931,11 @@
              && parser->colon_corrects_to_scope_p
              && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_NAME)
            {
-             error_at (token->location,
-                       "found %<:%> in nested-name-specifier, expected 
%<::%>");
+             gcc_rich_location richloc (token->location);
+             richloc.add_fixit_replace ("::");
+             error_at_rich_loc (&richloc,
+                                "found %<:%> in nested-name-specifier, "
+                                "expected %<::%>");
              token->type = CPP_SCOPE;
            }
 
===================================================================

2017-04-26  Volker Reichelt  <v.reich...@netcologne.de>

        * g++.dg/diagnostic/nested-name-1.C: New test.

Index: gcc/testsuite/g++.dg/diagnostic/nested-name-1.C
===================================================================
--- gcc/testsuite/g++.dg/diagnostic/nested-name-1.C     2017-04-26
+++ gcc/testsuite/g++.dg/diagnostic/nested-name-1.C     2017-04-26
@@ -0,0 +1,13 @@
+// { dg-options "-fdiagnostics-show-caret" }
+
+namespace N
+{
+  struct A {};
+}
+
+N:A a;  /* { dg-error "nested-name-specifier" }
+  { dg-begin-multiline-output "" }
+ N:A a;
+  ^
+  ::
+  { dg-end-multiline-output "" } */
===================================================================

Reply via email to