aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-10-06 16:37:44 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-10-06 12:37:44 -0400
commit27bb83393c0b0df8aab5c4f86599871692303d75 (patch)
tree39553ac73185a8e3e8a68db528c91050cbf20a34
parentd8d64559deb2b23c9f3e65b793a01fb695722f2d (diff)
downloadgcc-27bb83393c0b0df8aab5c4f86599871692303d75.zip
gcc-27bb83393c0b0df8aab5c4f86599871692303d75.tar.gz
gcc-27bb83393c0b0df8aab5c4f86599871692303d75.tar.bz2
pt.c (instantiate_decl): Look for the original template.
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
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl2.c8
-rw-r--r--gcc/cp/pt.c13
-rw-r--r--gcc/cp/tree.c1
4 files changed, 20 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 717305a..9ed725c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index b99a1fa..428ba14 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 3f6a578..95109cf 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 6653543..afbdb05 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