On 2 May, Martin Sebor wrote: > On 04/29/2017 04:23 PM, Volker Reichelt wrote: >> Hi, >> >> the following patch adds fix-it hints to the C++ parser for two wrongly >> used keywords detected in cp_parser_decl_specifier_seq. >> >> Bootstrapped and regtested on x86_64-pc-linux-gnu. >> >> OK for trunk? >> >> Regards, >> Volker >> >> >> 2017-04-29 Volker Reichelt <v.reich...@netcologne.de> >> >> * parser.c (cp_parser_decl_specifier_seq): Add fix-it hints for >> friend outside class and obsolete auto as storage-class-specifier. >> >> Index: gcc/cp/parser.c >> =================================================================== >> --- gcc/cp/parser.c 2017-04-28 >> +++ gcc/cp/parser.c 2017-04-28 >> @@ -13213,7 +13213,9 @@ >> case RID_FRIEND: >> if (!at_class_scope_p ()) >> { >> - error_at (token->location, "%<friend%> used outside of class"); >> + gcc_rich_location richloc (token->location); >> + richloc.add_fixit_remove (); >> + error_at_rich_loc (&richloc, "%<friend%> used outside of class"); >> cp_lexer_purge_token (parser->lexer); >> } >> else >> @@ -13277,8 +13279,11 @@ >> >> /* Complain about `auto' as a storage specifier, if >> we're complaining about C++0x compatibility. */ >> - warning_at (token->location, OPT_Wc__11_compat, "%<auto%>" >> - " changes meaning in C++11; please remove it"); >> + gcc_rich_location richloc (token->location); >> + richloc.add_fixit_remove (); >> + warning_at_rich_loc (&richloc, OPT_Wc__11_compat, >> + "%<auto%> changes meaning in C++11; " >> + "please remove it"); > > What caught my eye here is the "please remove it" part :) Maybe > it's me but it seems a little too forceful for a warning (despite > the please). I would find a more conventional phrasing like > "suggest to remove it" to be more suitable. > > That said, I wonder if removing the auto is actually the best > suggestion. Wouldn't it more in line with where C++ is headed > to suggest to remove the type and keep the auto? > > Martin
I think you missed that we are in C++98 mode here. Dropping the 'auto' is the only viable choice to stay in C++98 mode and gain C++11 compatibility. With that in mind, I don't think that the wording "please remove it" is bad. The user is in C++98 mode and wants to know about C++11 compatibility (as OPT_Wc__11_compat is selected). So the compiler gives her/him clear advice what to do. For me "suggest to remove it" sounde too weak (more like "if you run into problems in C++11, you could try to drop the 'auto' here"). Other solutions like "'auto' needs to be removed here to gain C++11 compatibility" sound a bit clumsy to me. Regards, Volker