mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
05aca4e73c
commit
048336099e
|
|
@ -1,3 +1,11 @@
|
||||||
|
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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))
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue