c++: Partially revert: local externs in templates do not get template head

Turns out I didn't get OMP reductions correct.  To address those I
need to do some reorganization, so this patch just reverts the
OMP-specific pieces of the local decl changes.

	gcc/cp/
	* pt.c (push_template_decl_real): OMP reductions retain a template
	header.
	(tsubst_function_decl): Likewise.
This commit is contained in:
Nathan Sidwell 2020-09-15 07:55:18 -07:00
parent 8f0d743c2d
commit 3304888c25

View file

@ -6072,9 +6072,11 @@ push_template_decl_real (tree decl, bool is_friend)
if (is_primary)
retrofit_lang_decl (decl);
if (DECL_LANG_SPECIFIC (decl)
&& (!VAR_OR_FUNCTION_DECL_P (decl)
|| !ctx
|| !DECL_LOCAL_DECL_P (decl)))
&& !(VAR_OR_FUNCTION_DECL_P (decl)
&& DECL_LOCAL_DECL_P (decl)
/* OMP reductions still need a template header. */
&& !(TREE_CODE (decl) == FUNCTION_DECL
&& DECL_OMP_DECLARE_REDUCTION_P (decl))))
DECL_TEMPLATE_INFO (decl) = info;
}
@ -13712,7 +13714,8 @@ tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE
|| DECL_LOCAL_DECL_P (t));
if (DECL_LOCAL_DECL_P (t))
if (DECL_LOCAL_DECL_P (t)
&& !DECL_OMP_DECLARE_REDUCTION_P (t))
{
if (tree spec = retrieve_local_specialization (t))
return spec;
@ -13967,7 +13970,8 @@ tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
&& !uses_template_parms (argvec))
tsubst_default_arguments (r, complain);
}
else if (DECL_LOCAL_DECL_P (r))
else if (DECL_LOCAL_DECL_P (r)
&& !DECL_OMP_DECLARE_REDUCTION_P (r))
{
if (!cp_unevaluated_operand)
register_local_specialization (r, t);