c++: Improve redeclared parameter name diagnostic [PR94588]

While reviewing [basic.scope.param] I noticed we don't show the location
of the previous declaration when giving an error about "A parameter name
shall not be redeclared in the outermost block of the function definition".

	PR c++/94588
	* name-lookup.c (check_local_shadow): Add an inform call.

	* g++.dg/diagnostic/redeclaration-1.C: Add dg-message.
This commit is contained in:
Marek Polacek 2020-04-13 19:06:39 -04:00
parent e020d2bbe8
commit 7eee265e6b
4 changed files with 17 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2020-04-13 Marek Polacek <polacek@redhat.com>
PR c++/94588
* name-lookup.c (check_local_shadow): Add an inform call.
2020-04-13 Patrick Palka <ppalka@redhat.com>
PR c++/94521

View File

@ -2670,8 +2670,8 @@ check_local_shadow (tree decl)
}
/* Don't complain if it's from an enclosing function. */
else if (DECL_CONTEXT (old) == current_function_decl
&& TREE_CODE (decl) != PARM_DECL
&& TREE_CODE (old) == PARM_DECL)
&& TREE_CODE (decl) != PARM_DECL
&& TREE_CODE (old) == PARM_DECL)
{
/* Go to where the parms should be and see if we find
them there. */
@ -2681,11 +2681,14 @@ check_local_shadow (tree decl)
/* Skip the ctor/dtor cleanup level. */
b = b->level_chain;
/* ARM $8.3 */
/* [basic.scope.param] A parameter name shall not be redeclared
in the outermost block of the function definition. */
if (b->kind == sk_function_parms)
{
error_at (DECL_SOURCE_LOCATION (decl),
"declaration of %q#D shadows a parameter", decl);
inform (DECL_SOURCE_LOCATION (old),
"%q#D previously declared here", old);
return;
}
}

View File

@ -1,3 +1,8 @@
2020-04-13 Marek Polacek <polacek@redhat.com>
PR c++/94588
* g++.dg/diagnostic/redeclaration-1.C: Add dg-message.
2020-04-13 Martin Sebor <msebor@redhat.com>
PR c/92326

View File

@ -1,5 +1,5 @@
void
foo (int i)
foo (int i) // { dg-message "10:.int i. previously declared here" }
{
int i // { dg-error "7:declaration of .int i. shadows a parameter" }
(0);