Commit 486e4077 by Mark Mitchell Committed by Mark Mitchell

pt.c (lookup_template_class): Add comment.

	* pt.c (lookup_template_class): Add comment.
	(instantiate_class_template): Don't mark the _TYPE node for
	member class templates as an instantiation.

From-SVN: r23092
parent bd748f74
1998-10-14 Mark Mitchell <mark@markmitchell.com>
* pt.c (lookup_template_class): Add comment.
(instantiate_class_template): Don't mark the _TYPE node for
member class templates as an instantiation.
1998-10-14 Jason Merrill <jason@yorick.cygnus.com> 1998-10-14 Jason Merrill <jason@yorick.cygnus.com>
* decl.c (grokfndecl): Fix my thinko. * decl.c (grokfndecl): Fix my thinko.
......
...@@ -3547,7 +3547,9 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope) ...@@ -3547,7 +3547,9 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
push_obstacks (&permanent_obstack, &permanent_obstack); push_obstacks (&permanent_obstack, &permanent_obstack);
/* This type is a "partial instantiation" if any of the template /* This type is a "partial instantiation" if any of the template
arguments still inolve template parameters. */ arguments still inolve template parameters. Note that we set
IS_PARTIAL_INSTANTIATION for partial specializations as
well. */
is_partial_instantiation = uses_template_parms (arglist); is_partial_instantiation = uses_template_parms (arglist);
/* Create the type. */ /* Create the type. */
...@@ -4519,6 +4521,17 @@ instantiate_class_template (type) ...@@ -4519,6 +4521,17 @@ instantiate_class_template (type)
newtag = tsubst (tag, args, NULL_TREE); newtag = tsubst (tag, args, NULL_TREE);
if (TREE_CODE (newtag) != ENUMERAL_TYPE) if (TREE_CODE (newtag) != ENUMERAL_TYPE)
{ {
if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
/* Unfortunately, lookup_template_class sets
CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
instantiation (i.e., for the type of a member template
class nested within a template class.) This behavior is
required for maybe_process_partial_specialization to work
correctly, but is not accurate in this case; the TAG is not
an instantiation of anything. (The corresponding
TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
CLASSTYPE_USE_TEMPLATE (newtag) = 0;
/* Now, we call pushtag to put this NEWTAG into the scope of /* Now, we call pushtag to put this NEWTAG into the scope of
TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
pushtag calling push_template_decl. We don't have to do pushtag calling push_template_decl. We don't have to do
......
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