pt.c (instantiate_decl): Look for the original template.
authorJason Merrill <jason@yorick.cygnus.com>
Mon, 6 Oct 1997 16:37:44 +0000 (16:37 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 6 Oct 1997 16:37:44 +0000 (12:37 -0400)
Mon Oct  6 09:27:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

* 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

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/pt.c
gcc/cp/tree.c

index 717305a17466c70b13914f67fe810b7fab29e2a6..9ed725ca0cf089cefd36837ed0d185386203d027 100644 (file)
@@ -1,3 +1,9 @@
+Mon Oct  6 09:27:29 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * 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  <jason@yorick.cygnus.com>
 
        * Makefile.in (g++FAQ.*): New rules.
index b99a1fa08b92c772e4fbbbee81eb0d71fad915f3..428ba14efc058096958b9bc655207ce1aff9bd09 100644 (file)
@@ -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
index 3f6a5789f9281785a62f1ca1153246419cd90420..95109cf93ec164d37bab649829beff06cbfaa588 100644 (file)
@@ -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);
index 665354352b6508e5133e4daeff57e040c7670c24..afbdb05a7e19421cc1ed5aa05de81edf004d0f7b 100644 (file)
@@ -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