diff options
author | Volker Reichelt <v.reichelt@netcologne.de> | 2017-04-25 16:12:58 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2017-04-25 16:12:58 +0000 |
commit | 70caf430fe8b94a213f60ef7798766990da1b311 (patch) | |
tree | eff0df2600a421b2da84eeb658fc088080bdf317 /gcc | |
parent | 9c533e7dfb45334395ad4aeefdfa5b4740d5c1dc (diff) | |
download | gcc-70caf430fe8b94a213f60ef7798766990da1b311.zip gcc-70caf430fe8b94a213f60ef7798766990da1b311.tar.gz gcc-70caf430fe8b94a213f60ef7798766990da1b311.tar.bz2 |
parser.c (cp_parser_elaborated_type_specifier): Add fix-it to diagnostic of invalid class/struct keyword after enum.
* parser.c (cp_parser_elaborated_type_specifier): Add fix-it to
diagnostic of invalid class/struct keyword after enum.
* g++.dg/cpp0x/enum34.C: New test.
From-SVN: r247254
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/enum34.C | 11 |
4 files changed, 29 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9c8ad10..1a9ca19 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-04-25 Volker Reichelt <v.reichelt@netcologne.de> + + * parser.c (cp_parser_elaborated_type_specifier): Add fix-it to + diagnostic of invalid class/struct keyword after enum. + 2017-04-25 David Malcolm <dmalcolm@redhat.com> * parser.c (cp_parser_member_declaration): Add fix-it hint diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c9780f80..4714bc6 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -17270,12 +17270,16 @@ cp_parser_elaborated_type_specifier (cp_parser* parser, tag_type = enum_type; /* Issue a warning if the `struct' or `class' key (for C++0x scoped enums) is used here. */ - if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS) - || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT)) + cp_token *token = cp_lexer_peek_token (parser->lexer); + if (cp_parser_is_keyword (token, RID_CLASS) + || cp_parser_is_keyword (token, RID_STRUCT)) { - pedwarn (input_location, 0, "elaborated-type-specifier " - "for a scoped enum must not use the %qD keyword", - cp_lexer_peek_token (parser->lexer)->u.value); + gcc_rich_location richloc (token->location); + richloc.add_range (input_location, false); + richloc.add_fixit_remove (); + pedwarn_at_rich_loc (&richloc, 0, "elaborated-type-specifier for " + "a scoped enum must not use the %qD keyword", + token->u.value); /* Consume the `struct' or `class' and parse it anyway. */ cp_lexer_consume_token (parser->lexer); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1bc68ac3..6b1feff 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-04-25 Volker Reichelt <v.reichelt@netcologne.de> + + * g++.dg/cpp0x/enum34.C: New test. + 2017-04-25 Tom de Vries <tom@codesourcery.com> * lib/gcc-dg.exp (cleanup-after-saved-dg-test): Cleanup line number diff --git a/gcc/testsuite/g++.dg/cpp0x/enum34.C b/gcc/testsuite/g++.dg/cpp0x/enum34.C new file mode 100644 index 0000000..6bc72de --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/enum34.C @@ -0,0 +1,11 @@ +// { dg-options "-fdiagnostics-show-caret" } +// { dg-do compile { target c++11 } } + +enum class E; + +enum class E e; /* { dg-warning "scoped enum must not use" } + { dg-begin-multiline-output "" } + enum class E e; + ~~~~ ^~~~~ + ----- + { dg-end-multiline-output "" } */ |