On 6/17/20 12:49 PM, Jonathan Wakely wrote:
On 17/06/20 12:32 -0400, Jason Merrill wrote:
On 6/15/20 3:40 PM, Jonathan Wakely wrote:
Ping ...
G++ gives a bogus warning for 'struct A; using B = struct ::A;'
complaining that the elaborated-type-specifier doesn't declare anything.
That's true, but it's not trying to declare struct ::A, just refer to it
unambiguously. Do not emit the warning unless we're actually parsing a
declaration.
This also makes the relevant warning depend on -Wredundant-decls (which
is not part of -Wall or -Wextra) so it can be disabled on the command
line or by using #pragma. This means the warning will no longer be given
by default, so some tests need -Wredundant-decls added.
gcc/cp/ChangeLog:
PR c++/66159
* parser.c (cp_parser_elaborated_type_specifier): Do not warn
unless in a declaration. Make warning depend on
WOPT_redundant_decls.
gcc/testsuite/ChangeLog:
PR c++/66159
* g++.dg/parse/specialization1.C: Remove dg-warning.
* g++.dg/warn/forward-inner.C: Add -Wredundant-decls. Check
alias-declaration using elaborated-type-specifier.
* g++.dg/warn/pr36999.C: Add -Wredundant-decls.
Is it OK to make this warning no longer emitted by default, and not
even with -Wall -Wextra?
I'd like to keep it on by default.
Would it be better to add a new option for this specific warning,
which would be enabled by -Wall and also by -Wredundant-decls? Maybe
-Wredundant-decls-elaborated-type or something.
That sounds fine. But do you think people will really want to turn
this off after you fix the bug?
I don't know how to fix the bug, so I'll have to leave that to
somebody else.
By fixing the bug, I mean your "Do not emit the warning unless we're
actually parsing a declaration." Please do apply your change to the
condition for the warning.
Jason