c++: using-decl instantiation

In streaming using decls I needed to check some assumptions.  This
adds those checks to the instantiation machinery.

	gcc/cp/
	* pt.c (tsubst_expr): Simplify using decl instantiation, add
	asserts.
This commit is contained in:
Nathan Sidwell 2020-11-03 10:21:20 -08:00
parent 78f2f08ac8
commit a52bf01643

View File

@ -18058,11 +18058,18 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
finish_label_decl (DECL_NAME (decl));
else if (TREE_CODE (decl) == USING_DECL)
{
tree scope = USING_DECL_SCOPE (decl);
tree name = DECL_NAME (decl);
/* We cannot have a member-using decl here (until 'using
enum T' is a thing). */
gcc_checking_assert (!DECL_DEPENDENT_P (decl));
scope = tsubst (scope, args, complain, in_decl);
finish_nonmember_using_decl (scope, name);
/* This must be a non-dependent using-decl, and we'll have
used the names it found during template parsing. We do
not want to do the lookup again, because we might not
find the things we found then. (Again, using enum T
might mean we have to do things here.) */
tree scope = USING_DECL_SCOPE (decl);
gcc_checking_assert (scope
== tsubst (scope, args, complain, in_decl));
}
else if (is_capture_proxy (decl)
&& !DECL_TEMPLATE_INSTANTIATION (current_function_decl))