From: Marek Polacek Date: Mon, 13 Apr 2020 23:06:39 +0000 (-0400) Subject: c++: Improve redeclared parameter name diagnostic [PR94588] X-Git-Tag: basepoints/gcc-11~369 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7eee265e6bd58bf48da70fef97f2ac7179a9f41c;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 65b648a3edce..7d742c15ba88 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2020-04-13 Marek Polacek + + PR c++/94588 + * name-lookup.c (check_local_shadow): Add an inform call. + 2020-04-13 Patrick Palka PR c++/94521 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 8dd0b0d723e7..9b68b15be602 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -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; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 723d48410165..2035cf6fd1fa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-04-13 Marek Polacek + + PR c++/94588 + * g++.dg/diagnostic/redeclaration-1.C: Add dg-message. + 2020-04-13 Martin Sebor PR c/92326 diff --git a/gcc/testsuite/g++.dg/diagnostic/redeclaration-1.C b/gcc/testsuite/g++.dg/diagnostic/redeclaration-1.C index a41a2b8f1c4b..f0e43d414a86 100644 --- a/gcc/testsuite/g++.dg/diagnostic/redeclaration-1.C +++ b/gcc/testsuite/g++.dg/diagnostic/redeclaration-1.C @@ -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);