aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-10-19 09:38:59 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-10-19 09:38:59 +0200
commitcd30a0b8fec5e27d43349e4d48e166f1ccde6306 (patch)
treea348b948e294ac9c727be78f3655ee80dfdf152d /gcc/fortran/resolve.c
parentbcc478b9647e2af4b715fda6676d98f1e129d16b (diff)
downloadgcc-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.c8
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);