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:
parent
402cdad5e7
commit
c3baf4b55a
@ -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.
|
||||
|
||||
|
@ -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;
|
||||
|
21
gcc/cp/pt.c
21
gcc/cp/pt.c
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user