c++: Improve the MVP -Wparentheses diagnostic.
authorMarek Polacek <polacek@redhat.com>
Wed, 28 Oct 2020 18:45:27 +0000 (14:45 -0400)
committerMarek Polacek <polacek@redhat.com>
Wed, 28 Oct 2020 22:02:05 +0000 (18:02 -0400)
commit24fb1d9c5855900b5229d8db445eba515c8375e3
treed588d145655703722010e4cffffe040a0c0762bf
parent455ade18462e5076065b1970e21c622239797392
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.
gcc/cp/decl.c
gcc/cp/parser.c
gcc/testsuite/g++.dg/warn/mvp3.C [new file with mode: 0644]