diff options
author | Volker Reichelt <v.reichelt@netcologne.de> | 2017-04-29 22:27:13 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2017-04-29 22:27:13 +0000 |
commit | 6bbb3a69efa9d129c90179c3d00a0ac385a32f43 (patch) | |
tree | c91b9914e72233b204f739045b85522526f2229f | |
parent | 30fc569c180ea2bf773402d12e8435d99e42a389 (diff) | |
download | gcc-6bbb3a69efa9d129c90179c3d00a0ac385a32f43.zip gcc-6bbb3a69efa9d129c90179c3d00a0ac385a32f43.tar.gz gcc-6bbb3a69efa9d129c90179c3d00a0ac385a32f43.tar.bz2 |
parser.c (cp_parser_member_declaration): Add fix-it hints for stray comma and missing semicolon at end of member declaration.
* parser.c (cp_parser_member_declaration): Add fix-it hints for
stray comma and missing semicolon at end of member declaration.
* g++.dg/diagnostic/member-decl-1.C: New test.
From-SVN: r247412
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/diagnostic/member-decl-1.C | 18 |
4 files changed, 35 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 36e114b..9c9818f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-04-29 Volker Reichelt <v.reichelt@netcologne.de> + + * parser.c (cp_parser_member_declaration): Add fix-it hints for + stray comma and missing semicolon at end of member declaration. + 2017-04-27 Volker Reichelt <v.reichelt@netcologne.de> * parser.c (cp_parser_cast_expression): Add target type of cast to diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 3917893..95af052 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -23461,8 +23461,10 @@ cp_parser_member_declaration (cp_parser* parser) if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) { cp_token *token = cp_lexer_previous_token (parser->lexer); - error_at (token->location, - "stray %<,%> at end of member declaration"); + gcc_rich_location richloc (token->location); + richloc.add_fixit_remove (); + error_at_rich_loc (&richloc, "stray %<,%> at end of " + "member declaration"); } } /* If the next token isn't a `;', then we have a parse error. */ @@ -23473,8 +23475,10 @@ cp_parser_member_declaration (cp_parser* parser) actual semicolon is missing. Find the previous token and use that for our error position. */ cp_token *token = cp_lexer_previous_token (parser->lexer); - error_at (token->location, - "expected %<;%> at end of member declaration"); + gcc_rich_location richloc (token->location); + richloc.add_fixit_insert_after (";"); + error_at_rich_loc (&richloc, "expected %<;%> at end of " + "member declaration"); /* Assume that the user meant to provide a semicolon. If we were to cp_parser_skip_to_end_of_statement, we might diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2d3d02b..818e002 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-04-29 Volker Reichelt <v.reichelt@netcologne.de> + + * g++.dg/diagnostic/member-decl-1.C: New test. + 2017-04-29 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/80487 diff --git a/gcc/testsuite/g++.dg/diagnostic/member-decl-1.C b/gcc/testsuite/g++.dg/diagnostic/member-decl-1.C new file mode 100644 index 0000000..be1ef85 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/member-decl-1.C @@ -0,0 +1,18 @@ +// { dg-options "-fdiagnostics-show-caret" } + +struct A +{ + int i,; /* { dg-error "stray .,. at end of member declaration" } + { dg-begin-multiline-output "" } + int i,; + ^ + - + { dg-end-multiline-output "" } */ + + int j /* { dg-error "expected .;. at end of member declaration" } + { dg-begin-multiline-output "" } + int j + ^ + ; + { dg-end-multiline-output "" } */ +}; |