aboutsummaryrefslogtreecommitdiff
path: root/gcc/omp-low.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-07-17 12:54:52 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-07-17 12:54:52 +0200
commita3bccfa17c34a937d0222ec084fe9ca97d88a01f (patch)
treeb44bf57a4b472439c666eb658fac4ec8961c1bc5 /gcc/omp-low.c
parent8e93ce66b268e7b213d8d11c7f7b08856c4a2162 (diff)
downloadgcc-a3bccfa17c34a937d0222ec084fe9ca97d88a01f.zip
gcc-a3bccfa17c34a937d0222ec084fe9ca97d88a01f.tar.gz
gcc-a3bccfa17c34a937d0222ec084fe9ca97d88a01f.tar.bz2
re PR middle-end/86542 (wrong-code for collapsed taskloop which needs omp_cpyfn)
PR middle-end/86542 * omp-low.c (create_task_copyfn): Copy over also fields corresponding to _looptemp_ clauses, other than the first two. * testsuite/libgomp.c++/pr86542.C: New test. From-SVN: r262815
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r--gcc/omp-low.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index c591231..714490d 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -7026,6 +7026,7 @@ create_task_copyfn (gomp_task *task_stmt, omp_context *ctx)
splay_tree_node n;
struct omp_taskcopy_context tcctx;
location_t loc = gimple_location (task_stmt);
+ size_t looptempno = 0;
child_fn = gimple_omp_task_copy_fn (task_stmt);
child_cfun = DECL_STRUCT_FUNCTION (child_fn);
@@ -7139,6 +7140,15 @@ create_task_copyfn (gomp_task *task_stmt, omp_context *ctx)
t = build2 (MODIFY_EXPR, TREE_TYPE (dst), dst, src);
append_to_statement_list (t, &list);
break;
+ case OMP_CLAUSE__LOOPTEMP_:
+ /* Fields for first two _looptemp_ clauses are initialized by
+ GOMP_taskloop*, the rest are handled like firstprivate. */
+ if (looptempno < 2)
+ {
+ looptempno++;
+ break;
+ }
+ /* FALLTHRU */
case OMP_CLAUSE_FIRSTPRIVATE:
decl = OMP_CLAUSE_DECL (c);
if (is_variable_sized (decl))
@@ -7164,7 +7174,10 @@ create_task_copyfn (gomp_task *task_stmt, omp_context *ctx)
src = decl;
dst = build_simple_mem_ref_loc (loc, arg);
dst = omp_build_component_ref (dst, f);
- t = lang_hooks.decls.omp_clause_copy_ctor (c, dst, src);
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE__LOOPTEMP_)
+ t = build2 (MODIFY_EXPR, TREE_TYPE (dst), dst, src);
+ else
+ t = lang_hooks.decls.omp_clause_copy_ctor (c, dst, src);
append_to_statement_list (t, &list);
break;
case OMP_CLAUSE_PRIVATE: