Commit ed36980c by Jason Merrill

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.

From-SVN: r74433
parent 4e8537ae
2003-12-07 Giovanni Bajo <giovannibajo@gcc.gnu.org> 2003-12-08 Jason Merrill <jason@redhat.com>
PR c++/2294 Give the anonymous namespace a null DECL_NAME.
* name-lookup.c (push_overloaded_decl): Always construct an * cp-tree.h: Don't declare anonymous_namespace_name.
OVERLOAD unless the declaration is a built-in. * decl.c: Don't define it.
(set_namespace_binding): While binding OVERLOADs with only one * dump.c (cp_dump_tree): Don't check for it.
declaration, we still need to call supplement_binding. * cxx-pretty-print.c (pp_cxx_original_namespace_definition): Likewise.
* init.c (build_new_1): Deal with an OVERLOAD set when * error.c (dump_decl): Likewise.
looking up for _Jv_AllocObject. * name-lookup.c: Define it here.
* except.c (build_throw): Likewise for _Jv_Throw. (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> 2003-12-06 Mark Mitchell <mark@codesourcery.com>
......
...@@ -3085,8 +3085,6 @@ extern GTY(()) tree error_mark_list; ...@@ -3085,8 +3085,6 @@ extern GTY(()) tree error_mark_list;
extern GTY(()) tree integer_two_node; extern GTY(()) tree integer_two_node;
extern GTY(()) tree integer_three_node; extern GTY(()) tree integer_three_node;
extern GTY(()) tree anonymous_namespace_name;
/* The number of function bodies which we are currently processing. /* The number of function bodies which we are currently processing.
(Zero if we are at namespace scope, one inside the body of a (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.) */ function, two inside the body of a function in a local class, etc.) */
......
...@@ -1479,7 +1479,7 @@ static void ...@@ -1479,7 +1479,7 @@ static void
pp_cxx_original_namespace_definition (cxx_pretty_printer *pp, tree t) pp_cxx_original_namespace_definition (cxx_pretty_printer *pp, tree t)
{ {
pp_cxx_identifier (pp, "namespace"); pp_cxx_identifier (pp, "namespace");
if (DECL_NAME (t) != anonymous_namespace_name) if (DECL_NAME (t))
pp_cxx_unqualified_id (pp, t); pp_cxx_unqualified_id (pp, t);
pp_cxx_whitespace (pp); pp_cxx_whitespace (pp);
pp_cxx_left_brace (pp); pp_cxx_left_brace (pp);
......
...@@ -228,10 +228,6 @@ struct named_label_list GTY(()) ...@@ -228,10 +228,6 @@ struct named_label_list GTY(())
#define named_labels cp_function_chain->x_named_labels #define named_labels cp_function_chain->x_named_labels
/* The name of the anonymous namespace, throughout this translation
unit. */
tree anonymous_namespace_name;
/* The number of function bodies which we are currently processing. /* The number of function bodies which we are currently processing.
(Zero if we are at namespace scope, one inside the body of a (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.) */ function, two inside the body of a function in a local class, etc.) */
......
...@@ -230,11 +230,6 @@ cp_dump_tree (void* dump_info, tree t) ...@@ -230,11 +230,6 @@ cp_dump_tree (void* dump_info, tree t)
dump_child ("tynm", TREE_TYPE (t)); dump_child ("tynm", TREE_TYPE (t));
return true; return true;
} }
else if (t == anonymous_namespace_name)
{
dump_string (di, "unnamed");
return true;
}
break; break;
case OFFSET_TYPE: case OFFSET_TYPE:
......
...@@ -805,7 +805,7 @@ dump_decl (tree t, int flags) ...@@ -805,7 +805,7 @@ dump_decl (tree t, int flags)
else else
{ {
dump_scope (CP_DECL_CONTEXT (t), flags); 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>"); pp_identifier (cxx_pp, "<unnamed>");
else else
pp_tree_identifier (cxx_pp, DECL_NAME (t)); pp_tree_identifier (cxx_pp, DECL_NAME (t));
......
...@@ -991,6 +991,8 @@ write_unqualified_name (const tree decl) ...@@ -991,6 +991,8 @@ write_unqualified_name (const tree decl)
write_special_name_constructor (decl); write_special_name_constructor (decl);
else if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_DESTRUCTOR_P (decl)) else if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_DESTRUCTOR_P (decl))
write_special_name_destructor (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)) else if (DECL_CONV_FN_P (decl))
{ {
/* Conversion operator. Handle it right here. /* Conversion operator. Handle it right here.
......
...@@ -48,6 +48,10 @@ static tree push_using_directive (tree); ...@@ -48,6 +48,10 @@ static tree push_using_directive (tree);
tree global_namespace; 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 /* 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 name and the total COUNT of chains. COUNT is assumed to be a power
...@@ -2990,6 +2994,7 @@ push_namespace (tree name) ...@@ -2990,6 +2994,7 @@ push_namespace (tree name)
tree d = NULL_TREE; tree d = NULL_TREE;
int need_new = 1; int need_new = 1;
int implicit_use = 0; int implicit_use = 0;
bool anon = !name;
timevar_push (TV_NAME_LOOKUP); timevar_push (TV_NAME_LOOKUP);
...@@ -2999,7 +3004,7 @@ push_namespace (tree name) ...@@ -2999,7 +3004,7 @@ push_namespace (tree name)
my_friendly_assert (global_namespace != NULL && name != global_scope_name, my_friendly_assert (global_namespace != NULL && name != global_scope_name,
20030531); 20030531);
if (!name) if (anon)
{ {
/* The name of anonymous namespace is unique for the translation /* The name of anonymous namespace is unique for the translation
unit. */ unit. */
...@@ -3034,6 +3039,12 @@ push_namespace (tree name) ...@@ -3034,6 +3039,12 @@ push_namespace (tree name)
d = build_lang_decl (NAMESPACE_DECL, name, void_type_node); d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace); DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
d = pushdecl (d); 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); begin_scope (sk_namespace, d);
} }
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment