diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2cf2aa8eb36..c6bd7b6c187 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +Wed Dec 17 17:08:52 1997 Benjamin Kosnik + + * pt.c (instantiate_class_template): Don't do injection when + processing_template_decl is true, as pollutes current_binding_level + for base classes. + Wed Dec 17 21:17:39 1997 Peter Schmid * pt.c (maybe_fold_nontype_arg): Add prototype. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5e540fb37fd..c1cfa9253f5 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1956,18 +1956,22 @@ instantiate_class_template (type) for (; d; d = TREE_CHAIN (d)) TREE_VALUE (d) = xref_tag_from_type (TREE_VALUE (d), NULL_TREE, 1); - d = tsubst (DECL_TEMPLATE_INJECT (template), args, + /* This does injection for friend functions. */ + if (!processing_template_decl) + { + d = tsubst (DECL_TEMPLATE_INJECT (template), args, TREE_VEC_LENGTH (args), NULL_TREE); - for (; d; d = TREE_CHAIN (d)) - { - tree t = TREE_VALUE (d); + for (; d; d = TREE_CHAIN (d)) + { + tree t = TREE_VALUE (d); - if (TREE_CODE (t) == TYPE_DECL) - /* Already injected. */; - else - pushdecl (t); - } + if (TREE_CODE (t) == TYPE_DECL) + /* Already injected. */; + else + pushdecl (t); + } + } } if (! uses_template_parms (type))