OSDN Git Service

* decl2.c (qualified_lookup_using_namespace): Look through
authorloewis <loewis@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 May 2000 07:23:26 +0000 (07:23 +0000)
committerloewis <loewis@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 May 2000 07:23:26 +0000 (07:23 +0000)
        namespace aliases.

        * decl.c (push_using_decl): Return the old decl on namespace level.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/decl2.c

index 9f63976..2a5c755 100644 (file)
@@ -1,3 +1,10 @@
+2000-05-22  Martin v. Löwis  <loewis@informatik.hu-berlin.de>
+
+       * decl2.c (qualified_lookup_using_namespace): Look through
+       namespace aliases.
+
+       * decl.c (push_using_decl): Return the old decl on namespace level.
+
 2000-05-21  Mark Mitchell  <mark@codesourcery.com>
 
        * cp-tree.h (SET_BINFO_NEW_VTABLE_MARKED): Add sanity checks.
index 236eb9e..6e80505 100644 (file)
@@ -4386,9 +4386,10 @@ push_class_level_binding (name, x)
     }
 }
 
-/* Insert another USING_DECL into the current binding level,
-   returning this declaration. If this is a redeclaration,
-   do nothing and return NULL_TREE.  */
+/* Insert another USING_DECL into the current binding level, returning
+   this declaration. If this is a redeclaration, do nothing, and
+   return NULL_TREE if this not in namespace scope (in namespace
+   scope, a using decl might extend any previous bindings).  */
 
 tree
 push_using_decl (scope, name)
@@ -4403,7 +4404,7 @@ push_using_decl (scope, name)
     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
       break;
   if (decl)
-    return NULL_TREE;
+    return namespace_bindings_p () ? decl : NULL_TREE;
   decl = build_lang_decl (USING_DECL, name, void_type_node);
   DECL_INITIAL (decl) = scope;
   TREE_CHAIN (decl) = current_binding_level->usings;
index ad47f91..a8ab3fd 100644 (file)
@@ -4402,6 +4402,8 @@ qualified_lookup_using_namespace (name, scope, result, flags)
   /* ... and a list of namespace yet to see. */
   tree todo = NULL_TREE;
   tree usings;
+  /* Look through namespace aliases.  */
+  scope = ORIGINAL_NAMESPACE (scope);
   while (scope && (result != error_mark_node))
     {
       seen = tree_cons (scope, NULL_TREE, seen);