diff options
author | Mark Mitchell <mark@markmitchell.com> | 1998-10-14 20:23:45 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-10-14 20:23:45 +0000 |
commit | 486e40770d3273c7ab557c879ba39917dbd26cf0 (patch) | |
tree | 09d42cfe8eb3dcab500f5eccf86ca247c14168ab /gcc | |
parent | bd748f743d05218b191ce5f45caa4452c6b37d40 (diff) | |
download | gcc-486e40770d3273c7ab557c879ba39917dbd26cf0.zip gcc-486e40770d3273c7ab557c879ba39917dbd26cf0.tar.gz gcc-486e40770d3273c7ab557c879ba39917dbd26cf0.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 15 |
2 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 87e9762..0e5b319 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +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> * decl.c (grokfndecl): Fix my thinko. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index ea021fa..c836fbd 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3547,7 +3547,9 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope) push_obstacks (&permanent_obstack, &permanent_obstack); /* 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); /* Create the type. */ @@ -4519,6 +4521,17 @@ instantiate_class_template (type) newtag = tsubst (tag, args, NULL_TREE); 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 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid pushtag calling push_template_decl. We don't have to do |