Commit f9b20c62 by Jason Merrill Committed by Jason Merrill

re PR c++/39763 (-Wshadow reports shadowed declarations for parameters of unnamed temp objects)

	PR c++/39763
	* name-lookup.c (pushdecl_maybe_friend): Avoid all warnings
	about shadowing by tentative parms.

From-SVN: r146053
parent 85d04fa2
2009-04-14 Jason Merrill <jason@redhat.com>
PR c++/39763
* name-lookup.c (pushdecl_maybe_friend): Avoid all warnings
about shadowing by tentative parms.
2009-04-13 Jason Merrill <jason@redhat.com> 2009-04-13 Jason Merrill <jason@redhat.com>
PR c++/39480 PR c++/39480
......
...@@ -1008,13 +1008,18 @@ pushdecl_maybe_friend (tree x, bool is_friend) ...@@ -1008,13 +1008,18 @@ pushdecl_maybe_friend (tree x, bool is_friend)
&& TREE_PUBLIC (x)) && TREE_PUBLIC (x))
TREE_PUBLIC (name) = 1; TREE_PUBLIC (name) = 1;
/* Don't complain about the parms we push and then pop
while tentatively parsing a function declarator. */
if (TREE_CODE (x) == PARM_DECL && DECL_CONTEXT (x) == NULL_TREE)
/* Ignore. */;
/* Warn if shadowing an argument at the top level of the body. */ /* Warn if shadowing an argument at the top level of the body. */
if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x) else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
/* Inline decls shadow nothing. */ /* Inline decls shadow nothing. */
&& !DECL_FROM_INLINE (x) && !DECL_FROM_INLINE (x)
&& TREE_CODE (oldlocal) == PARM_DECL && TREE_CODE (oldlocal) == PARM_DECL
/* Don't check the `this' parameter. */ /* Don't check the `this' parameter. */
&& !DECL_ARTIFICIAL (oldlocal)) && !DECL_ARTIFICIAL (oldlocal))
{ {
bool err = false; bool err = false;
...@@ -1038,10 +1043,7 @@ pushdecl_maybe_friend (tree x, bool is_friend) ...@@ -1038,10 +1043,7 @@ pushdecl_maybe_friend (tree x, bool is_friend)
} }
} }
if (warn_shadow && !err if (warn_shadow && !err)
/* Don't complain about the parms we push and then pop
while tentatively parsing a function declarator. */
&& !(TREE_CODE (x) == PARM_DECL && DECL_CONTEXT (x) == NULL_TREE))
{ {
warning (OPT_Wshadow, "declaration of %q#D shadows a parameter", x); warning (OPT_Wshadow, "declaration of %q#D shadows a parameter", x);
warning (OPT_Wshadow, "%Jshadowed declaration is here", oldlocal); warning (OPT_Wshadow, "%Jshadowed declaration is here", oldlocal);
......
2009-04-14 Jason Merrill <jason@redhat.com>
PR c++/39763
* g++.dg/warn/Wshadow-4.C: Extend.
2009-04-14 Uros Bizjak <ubizjak@gmail.com> 2009-04-14 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/alpha/pr39740.c (dg-options): Add -mexplicit-relocs. * gcc.target/alpha/pr39740.c (dg-options): Add -mexplicit-relocs.
......
...@@ -18,3 +18,15 @@ int foo(int infoo) // { dg-warning "shadowed declaration" } ...@@ -18,3 +18,15 @@ int foo(int infoo) // { dg-warning "shadowed declaration" }
}; };
return outfoo; return outfoo;
} }
// PR c++/39763
int foo2(void)
{
int infoo = 0; // { dg-warning "shadowed declaration" }
int outfoo( INetURLObject( infoo ).GetMainURL()); // { dg-bogus "shadows" }
struct A
{
void f(int infoo) { } // { dg-warning "shadows a previous local" }
};
return outfoo;
}
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