69 lines
2.3 KiB
Diff
69 lines
2.3 KiB
Diff
|
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.
|
||
|
|
||
|
* g++.dg/warn/Wshadow-4.C: Extend.
|
||
|
|
||
|
--- gcc/cp/name-lookup.c (revision 146053)
|
||
|
+++ gcc/cp/name-lookup.c (revision 146054)
|
||
|
@@ -1002,13 +1002,18 @@ pushdecl_maybe_friend (tree x, bool is_f
|
||
|
&& TREE_PUBLIC (x))
|
||
|
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. */
|
||
|
- if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
|
||
|
- /* Inline decls shadow nothing. */
|
||
|
- && !DECL_FROM_INLINE (x)
|
||
|
- && TREE_CODE (oldlocal) == PARM_DECL
|
||
|
- /* Don't check the `this' parameter. */
|
||
|
- && !DECL_ARTIFICIAL (oldlocal))
|
||
|
+ else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
|
||
|
+ /* Inline decls shadow nothing. */
|
||
|
+ && !DECL_FROM_INLINE (x)
|
||
|
+ && TREE_CODE (oldlocal) == PARM_DECL
|
||
|
+ /* Don't check the `this' parameter. */
|
||
|
+ && !DECL_ARTIFICIAL (oldlocal))
|
||
|
{
|
||
|
bool err = false;
|
||
|
|
||
|
@@ -1032,10 +1037,7 @@ pushdecl_maybe_friend (tree x, bool is_f
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- 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))
|
||
|
+ if (warn_shadow && !err)
|
||
|
{
|
||
|
warning (OPT_Wshadow, "declaration of %q#D shadows a parameter", x);
|
||
|
warning (OPT_Wshadow, "%Jshadowed declaration is here", oldlocal);
|
||
|
--- gcc/testsuite/g++.dg/warn/Wshadow-4.C (revision 146053)
|
||
|
+++ gcc/testsuite/g++.dg/warn/Wshadow-4.C (revision 146054)
|
||
|
@@ -18,3 +18,15 @@ int foo(int infoo) // { dg-warning "sha
|
||
|
};
|
||
|
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;
|
||
|
+}
|
||
|
2009-04-13 Jason Merrill <jason@redhat.com>
|
||
|
|
||
|
PR c++/39480
|