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
This commit is contained in:
parent
80aab652d4
commit
4f4da4e99b
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
* pt.c (maybe_fold_nontype_arg): Add prototype.
|
||||
|
22
gcc/cp/pt.c
22
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))
|
||||
|
Loading…
Reference in New Issue
Block a user