From 1cad92845380a2175e70f5d6772d172f5c334201 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 19 Aug 2016 17:30:33 +0200 Subject: [PATCH] re PR fortran/71014 (associate statement inside omp parallel do appears to disable default private attribute for inner loop indices) PR fortran/71014 * resolve.c (gfc_resolve): For ns->construct_entities don't save, clear and restore omp state around the resolving. * testsuite/libgomp.fortran/pr71014.f90: New test. From-SVN: r239620 --- gcc/fortran/ChangeLog | 4 ++++ gcc/fortran/resolve.c | 6 ++++-- libgomp/ChangeLog | 5 +++++ libgomp/testsuite/libgomp.fortran/pr71014.f90 | 20 +++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 libgomp/testsuite/libgomp.fortran/pr71014.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 11767cdb297..23386cce487 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,9 @@ 2016-08-19 Jakub Jelinek + PR fortran/71014 + * resolve.c (gfc_resolve): For ns->construct_entities don't save, clear + and restore omp state around the resolving. + PR fortran/69281 * trans-openmp.c (gfc_trans_omp_parallel, gfc_trans_omp_task, gfc_trans_omp_target): Wrap gfc_trans_omp_code result in an extra diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 7763f9c7345..b7036a82837 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -15587,7 +15587,8 @@ gfc_resolve (gfc_namespace *ns) /* As gfc_resolve can be called during resolution of an OpenMP construct body, we should clear any state associated to it, so that say NS's DO loops are not interpreted as OpenMP loops. */ - gfc_omp_save_and_clear_state (&old_omp_state); + if (!ns->construct_entities) + gfc_omp_save_and_clear_state (&old_omp_state); resolve_types (ns); component_assignment_level = 0; @@ -15599,5 +15600,6 @@ gfc_resolve (gfc_namespace *ns) gfc_run_passes (ns); - gfc_omp_restore_state (&old_omp_state); + if (!ns->construct_entities) + gfc_omp_restore_state (&old_omp_state); } diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 5849aca7e50..32b11ec067f 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2016-08-19 Jakub Jelinek + + PR fortran/71014 + * testsuite/libgomp.fortran/pr71014.f90: New test. + 2016-08-18 Chung-Lin Tang PR middle-end/70895 diff --git a/libgomp/testsuite/libgomp.fortran/pr71014.f90 b/libgomp/testsuite/libgomp.fortran/pr71014.f90 new file mode 100644 index 00000000000..6d0d6bec46d --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/pr71014.f90 @@ -0,0 +1,20 @@ +! PR fortran/71014 +! { dg-do run } +! { dg-additional-options "-O0" } + +program pr71014 + implicit none + integer :: i, j + integer, parameter :: t = 100*101/2 + integer :: s(16) + s(:) = 0 +!$omp parallel do + do j = 1, 16 + associate (k => j) + do i = 1, 100 + s(j) = s(j) + i + end do + end associate + end do + if (any(s /= t)) call abort +end program pr71014 -- 2.30.2