diff options
author | Fabien ChĂȘne <fabien@gcc.gnu.org> | 2011-05-31 21:02:19 +0200 |
---|---|---|
committer | Fabien ChĂȘne <fabien@gcc.gnu.org> | 2011-05-31 21:02:19 +0200 |
commit | ff7714547ff7aaaac44011e2184fc876945ad0a5 (patch) | |
tree | 97fbbfa522f7cabcc14f432ab9403e0da183ef5f /gcc/cp/name-lookup.c | |
parent | d73b65b6dbed146ca88c93a183eae1cbe7b430b1 (diff) | |
download | gcc-ff7714547ff7aaaac44011e2184fc876945ad0a5.zip gcc-ff7714547ff7aaaac44011e2184fc876945ad0a5.tar.gz gcc-ff7714547ff7aaaac44011e2184fc876945ad0a5.tar.bz2 |
re PR c++/48010 (typedef redefinitions are allowed if the redefined type is a nested class type)
gcc/cp/ChangeLog
2010-05-31 Fabien Chene <fabien@gcc.gnu.org>
PR c++/48010
* name-lookup.c (supplement_binding_1): If the old binding was a
type name, also check that the DECL actually refers to the same
type or is not a type.
gcc/testsuite/ChangeLog
2010-05-31 Fabien Chene <fabien@gcc.gnu.org>
PR c++/48010
* g++.dg/lookup/name-clash9.C: New.
From-SVN: r174506
Diffstat (limited to 'gcc/cp/name-lookup.c')
-rw-r--r-- | gcc/cp/name-lookup.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 0e762fd..7f0f615 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -1,5 +1,5 @@ /* Definitions for C++ name lookup routines. - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net> @@ -436,7 +436,9 @@ supplement_binding_1 (cxx_binding *binding, tree decl) && DECL_ANTICIPATED (bval) && !DECL_HIDDEN_FRIEND_P (bval))) binding->value = decl; - else if (TREE_CODE (bval) == TYPE_DECL && DECL_ARTIFICIAL (bval)) + else if (TREE_CODE (bval) == TYPE_DECL && DECL_ARTIFICIAL (bval) + && (TREE_CODE (decl) != TYPE_DECL + || same_type_p (TREE_TYPE (decl), TREE_TYPE (bval)))) { /* The old binding was a type name. It was placed in VALUE field because it was thought, at the point it was |