Commit 4f4da4e9 by Benjamin Kosnik Committed by Benjamin Kosnik

c++: Don't inject friends while processing templates

	
* pt.c (instantiate_class_template): Don't do injection when
 	processing_template_decl is true, as pollutes current_binding_level
        for base classes.
PR g++/13911/14438

From-SVN: r17128
parent 80aab652
Wed Dec 17 17:08:52 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
* 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 <schmid@ltoi.iap.physik.tu-darmstadt.de> Wed Dec 17 21:17:39 1997 Peter Schmid <schmid@ltoi.iap.physik.tu-darmstadt.de>
* pt.c (maybe_fold_nontype_arg): Add prototype. * pt.c (maybe_fold_nontype_arg): Add prototype.
......
...@@ -1956,18 +1956,22 @@ instantiate_class_template (type) ...@@ -1956,18 +1956,22 @@ instantiate_class_template (type)
for (; d; d = TREE_CHAIN (d)) for (; d; d = TREE_CHAIN (d))
TREE_VALUE (d) = xref_tag_from_type (TREE_VALUE (d), NULL_TREE, 1); 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); TREE_VEC_LENGTH (args), NULL_TREE);
for (; d; d = TREE_CHAIN (d)) for (; d; d = TREE_CHAIN (d))
{ {
tree t = TREE_VALUE (d); tree t = TREE_VALUE (d);
if (TREE_CODE (t) == TYPE_DECL) if (TREE_CODE (t) == TYPE_DECL)
/* Already injected. */; /* Already injected. */;
else else
pushdecl (t); pushdecl (t);
} }
}
} }
if (! uses_template_parms (type)) if (! uses_template_parms (type))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment