Commit c14c0b15 by Nathan Sidwell Committed by Nathan Sidwell

re PR c++/81119 (-Wshadow warns on "typedef struct foo foo;")

	PR c++/81119
	* name-lookup.c (update_binding): Only warn about constructors
	hidden by functions.

	PR c++/81119
	* g++.dg/warn/pr81119.C: New.

From-SVN: r249369
parent a6e5212a
2017-06-19 Nathan Sidwell <nathan@acm.org>
PR c++/81119
* name-lookup.c (update_binding): Only warn about constructors
hidden by functions.
2017-06-17 Jason Merrill <jason@redhat.com> 2017-06-17 Jason Merrill <jason@redhat.com>
PR c++/60063 - -Wunused-local-typedefs and templates. PR c++/60063 - -Wunused-local-typedefs and templates.
......
...@@ -1784,6 +1784,14 @@ update_binding (cp_binding_level *level, cxx_binding *binding, tree *slot, ...@@ -1784,6 +1784,14 @@ update_binding (cp_binding_level *level, cxx_binding *binding, tree *slot,
else else
goto conflict; goto conflict;
if (to_type != old_type
&& warn_shadow
&& MAYBE_CLASS_TYPE_P (TREE_TYPE (to_type))
&& !(DECL_IN_SYSTEM_HEADER (decl)
&& DECL_IN_SYSTEM_HEADER (to_type)))
warning (OPT_Wshadow, "%q#D hides constructor for %q#D",
decl, to_type);
to_val = ovl_insert (decl, old); to_val = ovl_insert (decl, old);
} }
else if (!old) else if (!old)
...@@ -1849,21 +1857,6 @@ update_binding (cp_binding_level *level, cxx_binding *binding, tree *slot, ...@@ -1849,21 +1857,6 @@ update_binding (cp_binding_level *level, cxx_binding *binding, tree *slot,
add_decl_to_level (level, to_add); add_decl_to_level (level, to_add);
} }
if (to_type != old_type)
{
gcc_checking_assert (!old_type
&& TREE_CODE (to_type) == TYPE_DECL
&& DECL_ARTIFICIAL (to_type));
tree type = TREE_TYPE (to_type);
if (to_type != decl
&& MAYBE_CLASS_TYPE_P (type) && warn_shadow
&& (!DECL_IN_SYSTEM_HEADER (decl)
|| !DECL_IN_SYSTEM_HEADER (to_type)))
warning (OPT_Wshadow, "%q#D hides constructor for %q#T",
decl, type);
}
if (slot) if (slot)
{ {
if (STAT_HACK_P (*slot)) if (STAT_HACK_P (*slot))
......
2017-06-19 Nathan Sidwell <nathan@acm.org>
PR c++/81119
* g++.dg/warn/pr81119.C: New.
2017-06-19 Martin Liska <mliska@suse.cz> 2017-06-19 Martin Liska <mliska@suse.cz>
PR sanitizer/80879 PR sanitizer/80879
......
// PR c++/81119 Wshadow regression
// { dg-additional-options "-Wshadow" }
struct A;
typedef A A; // No warning, does not hide
struct B; // { dg-message "previous" }
typedef int B; // { dg-error "conflicting" }
struct C;
void C (); // { dg-warning "hides constructor" }
void C (int); // warning not repeated
struct D;
int D; // no warning, not a function
struct E;
enum X
{E}; // no warning, not a function
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment