OSDN Git Service

Give the anonymous namespace a null DECL_NAME.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Dec 2003 20:29:15 +0000 (20:29 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 8 Dec 2003 20:29:15 +0000 (20:29 +0000)
        * cp-tree.h: Don't declare anonymous_namespace_name.
        * decl.c: Don't define it.
        * dump.c (cp_dump_tree): Don't check for it.
        * cxx-pretty-print.c (pp_cxx_original_namespace_definition): Likewise.
        * error.c (dump_decl): Likewise.
        * name-lookup.c: Define it here.
        (push_namespace): Put it in DECL_ASSEMBLER_NAME instead.
        * mangle.c (write_unqualified_name): Adjust.

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

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/cxx-pretty-print.c
gcc/cp/decl.c
gcc/cp/dump.c
gcc/cp/error.c
gcc/cp/mangle.c
gcc/cp/name-lookup.c

index 8105bfc..3fa1392 100644 (file)
@@ -1,13 +1,25 @@
-2003-12-07  Giovanni Bajo  <giovannibajo@gcc.gnu.org>\r
-\r
-       PR c++/2294\r
-       * name-lookup.c (push_overloaded_decl): Always construct an \r
-       OVERLOAD unless the declaration is a built-in.\r
-       (set_namespace_binding): While binding OVERLOADs with only one\r
-       declaration, we still need to call supplement_binding.\r
-       * init.c (build_new_1): Deal with an OVERLOAD set when\r
-       looking up for _Jv_AllocObject.\r
-       * except.c (build_throw): Likewise for _Jv_Throw.\r
+2003-12-08  Jason Merrill  <jason@redhat.com>
+
+       Give the anonymous namespace a null DECL_NAME.
+       * cp-tree.h: Don't declare anonymous_namespace_name.
+       * decl.c: Don't define it.
+       * dump.c (cp_dump_tree): Don't check for it.
+       * cxx-pretty-print.c (pp_cxx_original_namespace_definition): Likewise.
+       * error.c (dump_decl): Likewise.
+       * name-lookup.c: Define it here.
+       (push_namespace): Put it in DECL_ASSEMBLER_NAME instead.
+       * mangle.c (write_unqualified_name): Adjust.
+
+2003-12-07  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       PR c++/2294
+       * name-lookup.c (push_overloaded_decl): Always construct an
+       OVERLOAD unless the declaration is a built-in.
+       (set_namespace_binding): While binding OVERLOADs with only one
+       declaration, we still need to call supplement_binding.
+       * init.c (build_new_1): Deal with an OVERLOAD set when
+       looking up for _Jv_AllocObject.
+       * except.c (build_throw): Likewise for _Jv_Throw.
 
 2003-12-06  Mark Mitchell  <mark@codesourcery.com>
 
index b02fb56..b1a434e 100644 (file)
@@ -3085,8 +3085,6 @@ extern GTY(()) tree error_mark_list;
 extern GTY(()) tree integer_two_node;
 extern GTY(()) tree integer_three_node;
 
-extern GTY(()) tree anonymous_namespace_name;
-
 /* The number of function bodies which we are currently processing.
    (Zero if we are at namespace scope, one inside the body of a
    function, two inside the body of a function in a local class, etc.)  */
index ca8c603..a27e258 100644 (file)
@@ -1479,7 +1479,7 @@ static void
 pp_cxx_original_namespace_definition (cxx_pretty_printer *pp, tree t)
 {
   pp_cxx_identifier (pp, "namespace");
-  if (DECL_NAME (t) != anonymous_namespace_name)
+  if (DECL_NAME (t))
     pp_cxx_unqualified_id (pp, t);
   pp_cxx_whitespace (pp);
   pp_cxx_left_brace (pp);
index a1b320f..9c6379f 100644 (file)
@@ -228,10 +228,6 @@ struct named_label_list GTY(())
 
 #define named_labels cp_function_chain->x_named_labels
 \f
-/* The name of the anonymous namespace, throughout this translation
-   unit.  */
-tree anonymous_namespace_name;
-
 /* The number of function bodies which we are currently processing.
    (Zero if we are at namespace scope, one inside the body of a
    function, two inside the body of a function in a local class, etc.)  */
index b48f25b..17b30c9 100644 (file)
@@ -230,11 +230,6 @@ cp_dump_tree (void* dump_info, tree t)
          dump_child ("tynm", TREE_TYPE (t));
          return true;
        }
-      else if (t == anonymous_namespace_name)
-       {
-         dump_string (di, "unnamed");
-         return true;
-       }
       break;
 
     case OFFSET_TYPE:
index 1c44324..dab0f2e 100644 (file)
@@ -805,7 +805,7 @@ dump_decl (tree t, int flags)
       else
         {
           dump_scope (CP_DECL_CONTEXT (t), flags);
-          if (DECL_NAME (t) == anonymous_namespace_name)
+          if (DECL_NAME (t) == NULL_TREE)
             pp_identifier (cxx_pp, "<unnamed>");
           else
             pp_tree_identifier (cxx_pp, DECL_NAME (t));
index 15334f3..94c885c 100644 (file)
@@ -991,6 +991,8 @@ write_unqualified_name (const tree decl)
     write_special_name_constructor (decl);
   else if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_DESTRUCTOR_P (decl))
     write_special_name_destructor (decl);
+  else if (DECL_NAME (decl) == NULL_TREE)
+    write_source_name (DECL_ASSEMBLER_NAME (decl));
   else if (DECL_CONV_FN_P (decl)) 
     {
       /* Conversion operator. Handle it right here.  
index 203cb1b..7446b30 100644 (file)
@@ -48,6 +48,10 @@ static tree push_using_directive (tree);
 
 tree global_namespace;
 
+/* The name of the anonymous namespace, throughout this translation
+   unit.  */
+GTY(()) tree anonymous_namespace_name;
+
 
 /* Compute the chain index of a binding_entry given the HASH value of its
    name and the total COUNT of chains.  COUNT is assumed to be a power
@@ -2990,6 +2994,7 @@ push_namespace (tree name)
   tree d = NULL_TREE;
   int need_new = 1;
   int implicit_use = 0;
+  bool anon = !name;
 
   timevar_push (TV_NAME_LOOKUP);
   
@@ -2999,7 +3004,7 @@ push_namespace (tree name)
   my_friendly_assert (global_namespace != NULL && name != global_scope_name,
                       20030531);
 
-  if (!name)
+  if (anon)
     {
       /* The name of anonymous namespace is unique for the translation
          unit.  */
@@ -3034,6 +3039,12 @@ push_namespace (tree name)
       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
       DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
       d = pushdecl (d);
+      if (anon)
+       {
+         /* Clear DECL_NAME for the benefit of debugging back ends.  */
+         SET_DECL_ASSEMBLER_NAME (d, name);
+         DECL_NAME (d) = NULL_TREE;
+       }
       begin_scope (sk_namespace, d);
     }
   else