diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-12-21 23:49:59 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-12-21 23:49:59 +0100 |
commit | b5f8e89ed7dc34e6850430315730b7601032bd89 (patch) | |
tree | e36e7de06e1786577ffec8b958e8d624efa967e0 /gcc | |
parent | d8ee9c7e549352147b9fc91ae8f5d8a007352894 (diff) | |
download | gcc-b5f8e89ed7dc34e6850430315730b7601032bd89.zip gcc-b5f8e89ed7dc34e6850430315730b7601032bd89.tar.gz gcc-b5f8e89ed7dc34e6850430315730b7601032bd89.tar.bz2 |
re PR c++/72707 (local anonymous union member hides names in the same scope)
PR c++/72707
* name-lookup.c (pushdecl_maybe_friend_1): Do check shadowing of
artificial x if it is an anonymous union variable.
* g++.dg/warn/Wshadow-12.C: New test.
From-SVN: r243877
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wshadow-12.C | 9 |
4 files changed, 22 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e493fd1..925d0b5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-12-21 Jakub Jelinek <jakub@redhat.com> + PR c++/72707 + * name-lookup.c (pushdecl_maybe_friend_1): Do check shadowing of + artificial x if it is an anonymous union variable. + PR bootstrap/78817 * typeck.c (cp_build_function_call_vec): If check_function_arguments returns true, set TREE_NO_WARNING on CALL_EXPR. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index a0cadb8..223838c 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -1111,8 +1111,10 @@ pushdecl_maybe_friend_1 (tree x, bool is_friend) || TREE_CODE (x) == TYPE_DECL))) /* Don't check for internally generated vars unless it's an implicit typedef (see create_implicit_typedef - in decl.c). */ - && (!DECL_ARTIFICIAL (x) || DECL_IMPLICIT_TYPEDEF_P (x))) + in decl.c) or anonymous union variable. */ + && (!DECL_ARTIFICIAL (x) + || DECL_IMPLICIT_TYPEDEF_P (x) + || (VAR_P (x) && DECL_ANON_UNION_VAR_P (x)))) { bool nowarn = false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 40f671f..3a704c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-12-21 Jakub Jelinek <jakub@redhat.com> + + PR c++/72707 + * g++.dg/warn/Wshadow-12.C: New test. + 2016-12-21 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/78580 diff --git a/gcc/testsuite/g++.dg/warn/Wshadow-12.C b/gcc/testsuite/g++.dg/warn/Wshadow-12.C new file mode 100644 index 0000000..95dc5be --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wshadow-12.C @@ -0,0 +1,9 @@ +// PR c++/72707 +// { dg-do compile } + +void +foo (double x) +{ + union { int x; }; // { dg-error "shadows a parameter" } + x = 0; +} |