On 9/14/20 6:47 PM, Tobias Burnus wrote:
This patch cause run-time fails for
g++ -fopenmp libgomp/testsuite/libgomp.c++/udr-13.C
The follow-up fix does not help.
Namely, in udr-3.C:115:
115 if (t.s != 11 || v.v != 9 || q != 0 || d != 3.0) abort ();
(gdb) p t.s
oops, I forgot the runtime tests are there -- it was so long ago! This
unbreaks it, while I go develop a more robust patch.
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.
pushed to trunk
nathan
--
Nathan Sidwell
diff --git c/gcc/cp/pt.c w/gcc/cp/pt.c
index c630ef5a070..1aea105edd5 100644
--- c/gcc/cp/pt.c
+++ w/gcc/cp/pt.c
@@ -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);