PR c++/91868 - improve -Wshadow location.

* name-lookup.c (check_local_shadow): Use DECL_SOURCE_LOCATION
	instead of input_location.

	* g++.dg/warn/Wshadow-16.C: New test.

From-SVN: r276103
This commit is contained in:
Marek Polacek 2019-09-24 14:40:24 +00:00 committed by Marek Polacek
parent fea3397e56
commit a0aedc7a41
4 changed files with 34 additions and 3 deletions

View File

@ -1,5 +1,9 @@
2019-09-24 Marek Polacek <polacek@redhat.com>
PR c++/91868 - improve -Wshadow location.
* name-lookup.c (check_local_shadow): Use DECL_SOURCE_LOCATION
instead of input_location.
PR c++/91845 - ICE with invalid pointer-to-member.
* expr.c (mark_use): Use error_operand_p.
* typeck2.c (build_m_component_ref): Check error_operand_p after

View File

@ -2771,7 +2771,7 @@ check_local_shadow (tree decl)
msg = "declaration of %qD shadows a previous local";
auto_diagnostic_group d;
if (warning_at (input_location, warning_code, msg, decl))
if (warning_at (DECL_SOURCE_LOCATION (decl), warning_code, msg, decl))
inform_shadowed (old);
return;
}
@ -2798,7 +2798,7 @@ check_local_shadow (tree decl)
|| TYPE_PTRMEMFUNC_P (TREE_TYPE (decl)))
{
auto_diagnostic_group d;
if (warning_at (input_location, OPT_Wshadow,
if (warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wshadow,
"declaration of %qD shadows a member of %qT",
decl, current_nonlambda_class_type ())
&& DECL_P (member))
@ -2818,7 +2818,7 @@ check_local_shadow (tree decl)
/* XXX shadow warnings in outer-more namespaces */
{
auto_diagnostic_group d;
if (warning_at (input_location, OPT_Wshadow,
if (warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wshadow,
"declaration of %qD shadows a global declaration",
decl))
inform_shadowed (old);

View File

@ -1,5 +1,8 @@
2019-09-24 Marek Polacek <polacek@redhat.com>
PR c++/91868 - improve -Wshadow location.
* g++.dg/warn/Wshadow-16.C: New test.
PR c++/91845 - ICE with invalid pointer-to-member.
* g++.dg/cpp1y/pr91845.C: New test.

View File

@ -0,0 +1,24 @@
// PR c++/91868 - improve -Wshadow location.
// { dg-options "-Wshadow" }
int global; // { dg-message "shadowed declaration" }
struct S
{
static int bar; // { dg-message "shadowed declaration" }
S (int i) { int bar // { dg-warning "19:declaration of .bar. shadows a member" }
(1);
int global // { dg-warning "9:declaration of .global. shadows a global declaration" }
(42);
}
};
void
foo ()
{
int xx; // { dg-message "shadowed declaration" }
{
S xx // { dg-warning "7:declaration of .xx. shadows a previous local" }
(42);
}
}