aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-03-08 18:21:06 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-03-08 18:21:06 +0100
commiteebc5e2dde79cb6179ffa9bf19bfe12d5da8b3e3 (patch)
treebb9a7f1a7cf351f848d540d5e91ef5504a8b3965 /gcc/gimplify.c
parenta46586c34f32db516de3e5a2c61968015cfcd9d0 (diff)
downloadgcc-eebc5e2dde79cb6179ffa9bf19bfe12d5da8b3e3.zip
gcc-eebc5e2dde79cb6179ffa9bf19bfe12d5da8b3e3.tar.gz
gcc-eebc5e2dde79cb6179ffa9bf19bfe12d5da8b3e3.tar.bz2
re PR c/79940 (OpenMP pragma - internal compiler error with taskloop)
PR c/79940 * gimplify.c (gimplify_omp_for): Replace index var in outer taskloop statement with an artificial variable and add OMP_CLAUSE_PRIVATE clause for it. * testsuite/libgomp.c/pr79940.c: New test. From-SVN: r245980
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 820459c..fbf136f 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -10232,8 +10232,9 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
gimple_omp_for_set_combined_into_p (gfor, true);
for (i = 0; i < (int) gimple_omp_for_collapse (gfor); i++)
{
- t = unshare_expr (gimple_omp_for_index (gfor, i));
- gimple_omp_for_set_index (gforo, i, t);
+ tree type = TREE_TYPE (gimple_omp_for_index (gfor, i));
+ tree v = create_tmp_var (type);
+ gimple_omp_for_set_index (gforo, i, v);
t = unshare_expr (gimple_omp_for_initial (gfor, i));
gimple_omp_for_set_initial (gforo, i, t);
gimple_omp_for_set_cond (gforo, i,
@@ -10241,7 +10242,13 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
t = unshare_expr (gimple_omp_for_final (gfor, i));
gimple_omp_for_set_final (gforo, i, t);
t = unshare_expr (gimple_omp_for_incr (gfor, i));
+ gcc_assert (TREE_OPERAND (t, 0) == gimple_omp_for_index (gfor, i));
+ TREE_OPERAND (t, 0) = v;
gimple_omp_for_set_incr (gforo, i, t);
+ t = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
+ OMP_CLAUSE_DECL (t) = v;
+ OMP_CLAUSE_CHAIN (t) = gimple_omp_for_clauses (gforo);
+ gimple_omp_for_set_clauses (gforo, t);
}
gimplify_seq_add_stmt (pre_p, gforo);
}