diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-10-19 09:38:59 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-10-19 09:38:59 +0200 |
commit | cd30a0b8fec5e27d43349e4d48e166f1ccde6306 (patch) | |
tree | a348b948e294ac9c727be78f3655ee80dfdf152d /gcc/fortran/resolve.c | |
parent | bcc478b9647e2af4b715fda6676d98f1e129d16b (diff) | |
download | gcc-cd30a0b8fec5e27d43349e4d48e166f1ccde6306.zip gcc-cd30a0b8fec5e27d43349e4d48e166f1ccde6306.tar.gz gcc-cd30a0b8fec5e27d43349e4d48e166f1ccde6306.tar.bz2 |
re PR fortran/82568 ([6/7/8] ICE with do-loop inside BLOCK inside omp)
PR fortran/82568
* gfortran.h (gfc_resolve_do_iterator): Add a bool arg.
(gfc_resolve_omp_local_vars): New declaration.
* openmp.c (omp_current_ctx): Make static.
(gfc_resolve_omp_parallel_blocks): Handle EXEC_OMP_TASKLOOP
and EXEC_OMP_TASKLOOP_SIMD.
(gfc_resolve_do_iterator): Add ADD_CLAUSE argument, if false,
don't actually add any clause. Move omp_current_ctx test
earlier.
(handle_local_var, gfc_resolve_omp_local_vars): New functions.
* resolve.c (gfc_resolve_code): Call gfc_resolve_omp_parallel_blocks
instead of just gfc_resolve_omp_do_blocks for EXEC_OMP_TASKLOOP
and EXEC_OMP_TASKLOOP_SIMD.
(gfc_resolve_code): Adjust gfc_resolve_do_iterator caller.
(resolve_codes): Call gfc_resolve_omp_local_vars.
* gfortran.dg/gomp/pr82568.f90: New test.
From-SVN: r253878
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 0188bdd..04d4e8a 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11008,6 +11008,8 @@ gfc_resolve_code (gfc_code *code, gfc_namespace *ns) case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD: case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD: case EXEC_OMP_TASK: + case EXEC_OMP_TASKLOOP: + case EXEC_OMP_TASKLOOP_SIMD: case EXEC_OMP_TEAMS: case EXEC_OMP_TEAMS_DISTRIBUTE: case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO: @@ -11023,8 +11025,6 @@ gfc_resolve_code (gfc_code *code, gfc_namespace *ns) case EXEC_OMP_DO_SIMD: case EXEC_OMP_SIMD: case EXEC_OMP_TARGET_SIMD: - case EXEC_OMP_TASKLOOP: - case EXEC_OMP_TASKLOOP_SIMD: gfc_resolve_omp_do_blocks (code, ns); break; case EXEC_SELECT_TYPE: @@ -11285,7 +11285,8 @@ start: { gfc_iterator *iter = code->ext.iterator; if (gfc_resolve_iterator (iter, true, false)) - gfc_resolve_do_iterator (code, iter->var->symtree->n.sym); + gfc_resolve_do_iterator (code, iter->var->symtree->n.sym, + true); } break; @@ -16352,6 +16353,7 @@ resolve_codes (gfc_namespace *ns) bitmap_obstack_initialize (&labels_obstack); gfc_resolve_oacc_declare (ns); + gfc_resolve_omp_local_vars (ns); gfc_resolve_code (ns->code, ns); bitmap_obstack_release (&labels_obstack); |