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:
parent
e020d2bbe8
commit
7eee265e6b
4 changed files with 17 additions and 4 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue