decl.c (pushdecl_class_level): Honor requests to bind names to OVERLOADs.
authorMark Mitchell <mark@codesourcery.com>
Tue, 13 Aug 2002 16:36:26 +0000 (16:36 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 13 Aug 2002 16:36:26 +0000 (16:36 +0000)
* decl.c (pushdecl_class_level): Honor requests to bind names to
OVERLOADs.

From-SVN: r56258

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/inherit3.C [new file with mode: 0644]

index 976fb10..0ab00f6 100644 (file)
@@ -1,3 +1,8 @@
+2002-08-13  Mark Mitchell  <mark@codesourcery.com>
+
+       * decl.c (pushdecl_class_level): Honor requests to bind names to
+       OVERLOADs.
+
 2002-08-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * decl2.c (build_call_from_tree): Fix uninitialized variable.
index 874baf9..bb0abbd 100644 (file)
@@ -4259,13 +4259,13 @@ void
 pushdecl_class_level (x)
      tree x;
 {
-  /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
-     scope looks for the pre-mangled name.  */
-  register tree name;
+  tree name;
 
+  /* Get the name of X.  */
   if (TREE_CODE (x) == OVERLOAD)
-    x = OVL_CURRENT (x);
-  name = DECL_NAME (x);
+    name = DECL_NAME (get_first_fn (x));
+  else
+    name = DECL_NAME (x);
 
   if (name)
     {
@@ -4275,11 +4275,12 @@ pushdecl_class_level (x)
     }
   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
     {
+      /* If X is an anonymous aggregate, all of its members are
+        treated as if they were members of the class containing the
+        aggregate, for naming purposes.  */
       tree f;
 
-      for (f = TYPE_FIELDS (TREE_TYPE (x));
-          f;
-          f = TREE_CHAIN (f))
+      for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f))
        pushdecl_class_level (f);
     }
 }
index 267062e..a6d3d69 100644 (file)
@@ -1,3 +1,7 @@
+2002-08-13  Mark Mitchell  <mark@codesourcery.com>
+
+       * g++.dg/template/inherit3: New test.
+
 2002-08-10  Nathan Sidwell  <nathan@codesourcery.com>
 
        * gcc.dg/bitfld-4.c: Add blank options.
diff --git a/gcc/testsuite/g++.dg/template/inherit3.C b/gcc/testsuite/g++.dg/template/inherit3.C
new file mode 100644 (file)
index 0000000..97b9e5b
--- /dev/null
@@ -0,0 +1,12 @@
+template <typename T>
+struct set {
+  void insert (const T&);
+  template <class X>
+  void insert  (X, X);
+};
+
+struct C : public set<int> {
+  void f (const int i) {
+    insert (i);
+  }
+};