mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 03:50:26 +08:00
c++: Improve the MVP -Wparentheses diagnostic.
I noticed that declarator->parenthesized is, for this warning, only set to the opening paren. But we can easily make it a range and generate a nicer diagnostic. Moreover, we can then offer a fix-it hint. TL;DR: This patch changes mvp3.C:8:7: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses] 8 | int (i); | ^ to mvp3.C:8:7: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses] 8 | int (i); | ^~~ mvp3.C:8:7: note: remove parentheses 8 | int (i); | ^~~ | - - Tested by using -fdiagnostics-generate-patch and verifying that the generated patch DTRT. gcc/cp/ChangeLog: * decl.c (grokdeclarator): Offer a fix-it hint for the "unnecessary parentheses in declaration" warning. * parser.c (cp_parser_direct_declarator): When setting declarator->parenthesized, use a location range. gcc/testsuite/ChangeLog: * g++.dg/warn/mvp3.C: New test.
This commit is contained in:
parent
455ade1846
commit
24fb1d9c58
@ -12037,8 +12037,17 @@ grokdeclarator (const cp_declarator *declarator,
|
||||
&& inner_declarator->u.id.qualifying_scope
|
||||
&& (MAYBE_CLASS_TYPE_P (type)
|
||||
|| TREE_CODE (type) == ENUMERAL_TYPE)))
|
||||
warning_at (declarator->parenthesized, OPT_Wparentheses,
|
||||
"unnecessary parentheses in declaration of %qs", name);
|
||||
{
|
||||
if (warning_at (declarator->parenthesized, OPT_Wparentheses,
|
||||
"unnecessary parentheses in declaration of %qs",
|
||||
name))
|
||||
{
|
||||
gcc_rich_location iloc (declarator->parenthesized);
|
||||
iloc.add_fixit_remove (get_start (declarator->parenthesized));
|
||||
iloc.add_fixit_remove (get_finish (declarator->parenthesized));
|
||||
inform (&iloc, "remove parentheses");
|
||||
}
|
||||
}
|
||||
if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
|
||||
break;
|
||||
|
||||
|
@ -21866,7 +21866,9 @@ cp_parser_direct_declarator (cp_parser* parser,
|
||||
open_paren = NULL;
|
||||
}
|
||||
if (open_paren)
|
||||
declarator->parenthesized = open_paren->location;
|
||||
declarator->parenthesized = make_location (open_paren->location,
|
||||
open_paren->location,
|
||||
close_paren->location);
|
||||
}
|
||||
|
||||
/* If we entered a scope, we must exit it now. */
|
||||
|
30
gcc/testsuite/g++.dg/warn/mvp3.C
Normal file
30
gcc/testsuite/g++.dg/warn/mvp3.C
Normal file
@ -0,0 +1,30 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-Wparentheses -fdiagnostics-show-caret" }
|
||||
// Test fix-it hints for the MVP warning.
|
||||
|
||||
void
|
||||
g ()
|
||||
{
|
||||
int (i); // { dg-warning "7:unnecessary parentheses" }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
int (i);
|
||||
^~~
|
||||
{ dg-end-multiline-output "" } */
|
||||
// { dg-message "7:remove parentheses" "" { target *-*-* } 8 }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
int (i);
|
||||
^~~
|
||||
- -
|
||||
{ dg-end-multiline-output "" } */
|
||||
int (fn(void)); // { dg-warning "7:unnecessary parentheses" }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
int (fn(void));
|
||||
^~~~~~~~~~
|
||||
{ dg-end-multiline-output "" } */
|
||||
// { dg-message "7:remove parentheses" "" { target *-*-* } 19 }
|
||||
/* { dg-begin-multiline-output "" }
|
||||
int (fn(void));
|
||||
^~~~~~~~~~
|
||||
- -
|
||||
{ dg-end-multiline-output "" } */
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user