pt.c (lookup_template_class): Don't mess with the context of the instantiation.

* pt.c (lookup_template_class): Don't mess with the context of the
	instantiation.
	* decl2.c (current_decl_namespace): Remove special handling for
	templates.

From-SVN: r21265
This commit is contained in:
Jason Merrill 1998-07-17 16:29:25 +00:00 committed by Jason Merrill
parent 402cdad5e7
commit c3baf4b55a
3 changed files with 11 additions and 25 deletions

View File

@ -1,5 +1,10 @@
1998-07-17 Jason Merrill <jason@yorick.cygnus.com>
* pt.c (lookup_template_class): Don't mess with the context of the
instantiation.
* decl2.c (current_decl_namespace): Remove special handling for
templates.
* pt.c (tsubst, case FUNCTION_DECL): Fix getting complete args for
a member template specialization.

View File

@ -4136,15 +4136,9 @@ current_decl_namespace ()
return TREE_PURPOSE (decl_namespace_list);
if (current_class_type)
if (CLASSTYPE_USE_TEMPLATE (current_class_type))
result = decl_namespace (CLASSTYPE_TI_TEMPLATE (current_class_type));
else
result = decl_namespace (TYPE_STUB_DECL (current_class_type));
result = decl_namespace (TYPE_STUB_DECL (current_class_type));
else if (current_function_decl)
if (DECL_USE_TEMPLATE (current_function_decl))
result = decl_namespace (DECL_TI_TEMPLATE (current_function_decl));
else
result = decl_namespace (current_function_decl);
result = decl_namespace (current_function_decl);
else
result = current_namespace;
return result;

View File

@ -2985,7 +2985,7 @@ lookup_template_class (d1, arglist, in_decl, context)
{
tree template = NULL_TREE, parmlist;
char *mangled_name;
tree id, t, id_context;
tree id, t;
if (TREE_CODE (d1) == IDENTIFIER_NODE)
{
@ -3030,12 +3030,6 @@ lookup_template_class (d1, arglist, in_decl, context)
else
my_friendly_abort (272);
/* A namespace is used as context only for mangling.
Template IDs with namespace context are found
in the global binding level. */
if (context != NULL_TREE && TREE_CODE (context) == NAMESPACE_DECL)
context = global_namespace;
/* With something like `template <class T> class X class X { ... };'
we could end up with D1 having nothing but an IDENTIFIER_LOCAL_VALUE.
We don't want to do that, but we have to deal with the situation, so
@ -3043,15 +3037,8 @@ lookup_template_class (d1, arglist, in_decl, context)
if (! template)
return error_mark_node;
/* We need an id_context to get the mangling right. If this is a
nested template, use the context. If it is global, retrieve the
context from the template. */
if (context && TREE_CODE (context) != NAMESPACE_DECL)
id_context = context;
else
id_context = DECL_CONTEXT (template);
if (id_context == NULL_TREE)
id_context = global_namespace;
if (context == NULL_TREE)
context = global_namespace;
if (TREE_CODE (template) != TEMPLATE_DECL)
{
@ -3154,7 +3141,7 @@ lookup_template_class (d1, arglist, in_decl, context)
mangled_name = mangle_class_name_for_template (IDENTIFIER_POINTER (d1),
parmlist,
arglist_for_mangling,
id_context);
context);
id = get_identifier (mangled_name);
IDENTIFIER_TEMPLATE (id) = d1;