Commit c3baf4b5 by Jason Merrill Committed by Jason Merrill

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
parent 402cdad5
1998-07-17 Jason Merrill <jason@yorick.cygnus.com> 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 * pt.c (tsubst, case FUNCTION_DECL): Fix getting complete args for
a member template specialization. a member template specialization.
......
...@@ -4136,14 +4136,8 @@ current_decl_namespace () ...@@ -4136,14 +4136,8 @@ current_decl_namespace ()
return TREE_PURPOSE (decl_namespace_list); return TREE_PURPOSE (decl_namespace_list);
if (current_class_type) 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) 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 else
result = current_namespace; result = current_namespace;
......
...@@ -2985,7 +2985,7 @@ lookup_template_class (d1, arglist, in_decl, context) ...@@ -2985,7 +2985,7 @@ lookup_template_class (d1, arglist, in_decl, context)
{ {
tree template = NULL_TREE, parmlist; tree template = NULL_TREE, parmlist;
char *mangled_name; char *mangled_name;
tree id, t, id_context; tree id, t;
if (TREE_CODE (d1) == IDENTIFIER_NODE) if (TREE_CODE (d1) == IDENTIFIER_NODE)
{ {
...@@ -3030,12 +3030,6 @@ lookup_template_class (d1, arglist, in_decl, context) ...@@ -3030,12 +3030,6 @@ lookup_template_class (d1, arglist, in_decl, context)
else else
my_friendly_abort (272); 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 { ... };' /* With something like `template <class T> class X class X { ... };'
we could end up with D1 having nothing but an IDENTIFIER_LOCAL_VALUE. 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 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) ...@@ -3043,15 +3037,8 @@ lookup_template_class (d1, arglist, in_decl, context)
if (! template) if (! template)
return error_mark_node; return error_mark_node;
/* We need an id_context to get the mangling right. If this is a if (context == NULL_TREE)
nested template, use the context. If it is global, retrieve the context = global_namespace;
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 (TREE_CODE (template) != TEMPLATE_DECL) if (TREE_CODE (template) != TEMPLATE_DECL)
{ {
...@@ -3154,7 +3141,7 @@ lookup_template_class (d1, arglist, in_decl, context) ...@@ -3154,7 +3141,7 @@ lookup_template_class (d1, arglist, in_decl, context)
mangled_name = mangle_class_name_for_template (IDENTIFIER_POINTER (d1), mangled_name = mangle_class_name_for_template (IDENTIFIER_POINTER (d1),
parmlist, parmlist,
arglist_for_mangling, arglist_for_mangling,
id_context); context);
id = get_identifier (mangled_name); id = get_identifier (mangled_name);
IDENTIFIER_TEMPLATE (id) = d1; IDENTIFIER_TEMPLATE (id) = d1;
......
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