From: Jason Merrill Date: Mon, 6 Oct 1997 16:37:44 +0000 (+0000) Subject: pt.c (instantiate_decl): Look for the original template. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=27bb83393c0b0df8aab5c4f86599871692303d75;p=gcc.git pt.c (instantiate_decl): Look for the original template. Mon Oct 6 09:27:29 1997 Jason Merrill * pt.c (instantiate_decl): Look for the original template. (tsubst): Set DECL_IMPLICIT_INSTANTIATION on partial instantiations of member templates. Fixes tstring. From-SVN: r15838 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 717305a1746..9ed725ca0cf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +Mon Oct 6 09:27:29 1997 Jason Merrill + + * pt.c (instantiate_decl): Look for the original template. + (tsubst): Set DECL_IMPLICIT_INSTANTIATION on partial instantiations + of member templates. + Wed Oct 1 08:41:38 1997 Jason Merrill * Makefile.in (g++FAQ.*): New rules. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index b99a1fa08b9..428ba14efc0 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2881,9 +2881,6 @@ finish_file () at_eof = 1; - if (flag_detailed_statistics) - dump_tree_statistics (); - /* Bad parse errors. Just forget about it. */ if (! global_bindings_p () || current_class_type) return; @@ -3306,7 +3303,10 @@ finish_file () varconst_time += this_time - start_time; if (flag_detailed_statistics) - dump_time_statistics (); + { + dump_tree_statistics (); + dump_time_statistics (); + } } /* This is something of the form 'A()()()()()+1' that has turned out to be an diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3f6a5789f92..95109cf93ec 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -465,8 +465,7 @@ determine_explicit_specialization (template_id, type, targs_out, is an explicit instantiation. */ int -check_explicit_specialization(declarator, decl, template_count, - flags) +check_explicit_specialization (declarator, decl, template_count, flags) tree declarator; tree decl; int template_count; @@ -2207,7 +2206,8 @@ tsubst (t, args, nargs, in_decl) DECL_INITIAL (new_decl) = DECL_INITIAL (decl); DECL_TI_TEMPLATE (new_decl) = tmpl; TREE_TYPE (tmpl) = TREE_TYPE (new_decl); - DECL_TEMPLATE_INSTANTIATIONS(tmpl) = NULL_TREE; + DECL_TEMPLATE_INSTANTIATIONS (tmpl) = NULL_TREE; + SET_DECL_IMPLICIT_INSTANTIATION (decl); /* The template parameters for this new template are all the template parameters for the old template, except the @@ -4411,7 +4411,7 @@ instantiate_decl (d) tree tmpl = TI_TEMPLATE (ti); tree args = TI_ARGS (ti); tree td; - tree pattern = DECL_TEMPLATE_RESULT (tmpl); + tree pattern; tree save_ti; int nested = in_function_p (); int d_defined; @@ -4419,6 +4419,11 @@ instantiate_decl (d) int line = lineno; char *file = input_filename; + while (DECL_TEMPLATE_INSTANTIATION (tmpl)) + tmpl = DECL_TI_TEMPLATE (tmpl); + + pattern = DECL_TEMPLATE_RESULT (tmpl); + if (TREE_CODE (d) == FUNCTION_DECL) { d_defined = (DECL_INITIAL (d) != NULL_TREE); diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 665354352b6..afbdb05a7e1 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1660,6 +1660,7 @@ print_lang_statistics () print_obstack_statistics ("decl_obstack", &decl_obstack); print_obstack_statistics ("permanent_obstack", &permanent_obstack); print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack); + print_inline_obstack_statistics (); print_search_statistics (); print_class_statistics (); #ifdef GATHER_STATISTICS