Commit 04833609 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/70376 (OpenMP taskloop construct fails to instantiate copy…

re PR c++/70376 (OpenMP taskloop construct fails to instantiate copy constructor(same as Bug 48869))

	PR c++/70376
	* cp-gimplify.c (genericize_omp_for_stmt): Don't walk OMP_FOR_CLAUSES
	for OMP_TASKLOOP here.
	(cp_genericize_r): Handle OMP_TASKLOOP like OMP_TASK, except do call
	genericize_omp_for_stmt instead of cp_walk_tree on OMP_BODY.

	* testsuite/libgomp.c++/pr70376.C: New test.

From-SVN: r234437
parent 05aca4e7
2016-03-23 Jakub Jelinek <jakub@redhat.com>
PR c++/70376
* cp-gimplify.c (genericize_omp_for_stmt): Don't walk OMP_FOR_CLAUSES
for OMP_TASKLOOP here.
(cp_genericize_r): Handle OMP_TASKLOOP like OMP_TASK, except do call
genericize_omp_for_stmt instead of cp_walk_tree on OMP_BODY.
2016-03-23 Alexandre Oliva <aoliva@redhat.com> 2016-03-23 Alexandre Oliva <aoliva@redhat.com>
Jason Merrill <jason@redhat.com> Jason Merrill <jason@redhat.com>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
......
...@@ -386,7 +386,8 @@ genericize_omp_for_stmt (tree *stmt_p, int *walk_subtrees, void *data) ...@@ -386,7 +386,8 @@ genericize_omp_for_stmt (tree *stmt_p, int *walk_subtrees, void *data)
tree clab = begin_bc_block (bc_continue, locus); tree clab = begin_bc_block (bc_continue, locus);
cp_walk_tree (&OMP_FOR_BODY (stmt), cp_genericize_r, data, NULL); cp_walk_tree (&OMP_FOR_BODY (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_CLAUSES (stmt), cp_genericize_r, data, NULL); if (TREE_CODE (stmt) != OMP_TASKLOOP)
cp_walk_tree (&OMP_FOR_CLAUSES (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_INIT (stmt), cp_genericize_r, data, NULL); cp_walk_tree (&OMP_FOR_INIT (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_COND (stmt), cp_genericize_r, data, NULL); cp_walk_tree (&OMP_FOR_COND (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_INCR (stmt), cp_genericize_r, data, NULL); cp_walk_tree (&OMP_FOR_INCR (stmt), cp_genericize_r, data, NULL);
...@@ -1272,7 +1273,9 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) ...@@ -1272,7 +1273,9 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
if (TREE_CODE (d) == VAR_DECL) if (TREE_CODE (d) == VAR_DECL)
gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d)); gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d));
} }
else if (TREE_CODE (stmt) == OMP_PARALLEL || TREE_CODE (stmt) == OMP_TASK) else if (TREE_CODE (stmt) == OMP_PARALLEL
|| TREE_CODE (stmt) == OMP_TASK
|| TREE_CODE (stmt) == OMP_TASKLOOP)
{ {
struct cp_genericize_omp_taskreg omp_ctx; struct cp_genericize_omp_taskreg omp_ctx;
tree c, decl; tree c, decl;
...@@ -1312,7 +1315,10 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) ...@@ -1312,7 +1315,10 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
default: default:
break; break;
} }
cp_walk_tree (&OMP_BODY (stmt), cp_genericize_r, data, NULL); if (TREE_CODE (stmt) == OMP_TASKLOOP)
genericize_omp_for_stmt (stmt_p, walk_subtrees, data);
else
cp_walk_tree (&OMP_BODY (stmt), cp_genericize_r, data, NULL);
wtd->omp_ctx = omp_ctx.outer; wtd->omp_ctx = omp_ctx.outer;
splay_tree_delete (omp_ctx.variables); splay_tree_delete (omp_ctx.variables);
} }
...@@ -1380,8 +1386,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) ...@@ -1380,8 +1386,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
genericize_break_stmt (stmt_p); genericize_break_stmt (stmt_p);
else if (TREE_CODE (stmt) == OMP_FOR else if (TREE_CODE (stmt) == OMP_FOR
|| TREE_CODE (stmt) == OMP_SIMD || TREE_CODE (stmt) == OMP_SIMD
|| TREE_CODE (stmt) == OMP_DISTRIBUTE || TREE_CODE (stmt) == OMP_DISTRIBUTE)
|| TREE_CODE (stmt) == OMP_TASKLOOP)
genericize_omp_for_stmt (stmt_p, walk_subtrees, data); genericize_omp_for_stmt (stmt_p, walk_subtrees, data);
else if ((flag_sanitize else if ((flag_sanitize
& (SANITIZE_NULL | SANITIZE_ALIGNMENT | SANITIZE_VPTR)) & (SANITIZE_NULL | SANITIZE_ALIGNMENT | SANITIZE_VPTR))
......
2016-03-23 Jakub Jelinek <jakub@redhat.com>
PR c++/70376
* testsuite/libgomp.c++/pr70376.C: New test.
2016-03-23 Tom de Vries <tom@codesourcery.com> 2016-03-23 Tom de Vries <tom@codesourcery.com>
* testsuite/libgomp.oacc-fortran/reduction-2.f90: Add missing * testsuite/libgomp.oacc-fortran/reduction-2.f90: Add missing
......
// PR c++/70376
// { dg-do link }
template <typename T>
struct A
{
A() { }
A(const A&) { }
void foo() { }
};
int
main ()
{
A<int> a;
#pragma omp taskloop
for (int i = 0; i < 64; i++)
a.foo();
return 0;
}
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