OSDN Git Service

gcc/cp/ChangeLog
authorfabien <fabien@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 May 2011 19:02:19 +0000 (19:02 +0000)
committerfabien <fabien@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 May 2011 19:02:19 +0000 (19:02 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174506 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/name-lookup.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lookup/name-clash9.C [new file with mode: 0644]

index 10a1d77..7a8042b 100644 (file)
@@ -1,3 +1,10 @@
+2010-05-31  Fabien ChĂȘne  <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.
+
 2011-05-31  Jason Merrill  <jason@redhat.com>
 
        PR c++/44870
index 0e762fd..7f0f615 100644 (file)
@@ -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
index f9fae62..10a41bd 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-15  Fabien ChĂȘne  <fabien@gcc.gnu.org>
+
+       PR c++/48010
+       * g++.dg/lookup/name-clash9.C: New.
+
 2011-05-31  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/18918
diff --git a/gcc/testsuite/g++.dg/lookup/name-clash9.C b/gcc/testsuite/g++.dg/lookup/name-clash9.C
new file mode 100644 (file)
index 0000000..4167f47
--- /dev/null
@@ -0,0 +1,8 @@
+// { dg-do compile }
+// PR c++/48010
+
+struct A
+{
+  struct type {}; // { dg-error "conflicts with previous" }
+  typedef int type; // { dg-error "declaration" }
+};