diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-06-01 16:24:02 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-06-01 16:24:02 +0200 |
commit | ab62397a1b51a925abf062999a96556241dc3478 (patch) | |
tree | 52005cd238123006b231cc7107a8b48143b7cd2f /gcc | |
parent | b66af6ed30d4bfa930e7afa30d078d7e83af42a0 (diff) | |
download | gcc-ab62397a1b51a925abf062999a96556241dc3478.zip gcc-ab62397a1b51a925abf062999a96556241dc3478.tar.gz gcc-ab62397a1b51a925abf062999a96556241dc3478.tar.bz2 |
re PR middle-end/71371 (ICE with OpenMP taskloop and addressable iterator)
PR middle-end/71371
* gimplify.c (gimplify_omp_for): Temporarily clear gimplify_omp_ctxp
around creation of the temporary.
* c-c++-common/gomp/pr71371.c: New test.
From-SVN: r236994
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimplify.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/pr71371.c | 25 |
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c4aa2d..128c2e4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-06-01 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/71371 + * gimplify.c (gimplify_omp_for): Temporarily clear gimplify_omp_ctxp + around creation of the temporary. + 2016-06-01 Richard Biener <rguenther@suse.de> PR tree-optimization/71366 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 131fa24..f12c6a1 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -9009,7 +9009,12 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p) || (ort == ORT_SIMD && TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) > 1)) { + struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp; + /* Make sure omp_add_variable is not called on it prematurely. + We call it ourselves a few lines later. */ + gimplify_omp_ctxp = NULL; var = create_tmp_var (TREE_TYPE (decl), get_name (decl)); + gimplify_omp_ctxp = ctx; TREE_OPERAND (t, 0) = var; gimplify_seq_add_stmt (&for_body, gimple_build_assign (decl, var)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb2f8c6..e8e8e3b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-06-01 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/71371 + * c-c++-common/gomp/pr71371.c: New test. + 2016-06-01 Richard Biener <rguenther@suse.de> PR tree-optimization/71366 diff --git a/gcc/testsuite/c-c++-common/gomp/pr71371.c b/gcc/testsuite/c-c++-common/gomp/pr71371.c new file mode 100644 index 0000000..da6e842 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr71371.c @@ -0,0 +1,25 @@ +/* PR middle-end/71371 */ +/* { dg-do compile } */ + +void baz (int *); + +void +foo (void) +{ + int i; + #pragma omp taskloop + for (i = 0; i < 100; i++) + baz (&i); +} + +void +bar (void) +{ + int i; + #pragma omp parallel + { + #pragma omp for + for (i = 0; i < 100; i++) + baz (&i); + } +} |