On Thu, Jun 30, 2016 at 10:00:23PM +0200, Toon Moene wrote: > On 06/30/2016 08:43 PM, Jakub Jelinek wrote: > > >On Thu, Jun 30, 2016 at 07:33:53PM +0200, Toon Moene wrote: > > >>A colleague of mine at Meteo France, Toulouse, managed to reduce a problem > >>he had with our common weather forecasting code when using OpenMP down to > >>the attached code and the transition from 4.9.0 -> 4.9.1. > >> > >>In 4.9.1 OpenMP 4.0 was introduced. That is of course a big hammer to start > >>looking for the culprit, but you are the best person to go to on this code. > > > >It is a bug, please file the PR. > > It is bugzilla number 71717 (see > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71717) > > Thanks for looking into this.
Fixed thusly, committed to trunk so far after bootstrap/regtest on x86_64-linux and i686-linux, queued for backporting. 2016-07-01 Jakub Jelinek <ja...@redhat.com> PR fortran/71717 * trans-openmp.c (gfc_omp_privatize_by_reference): Return false for GFC_DECL_ASSOCIATE_VAR_P with POINTER_TYPE. * testsuite/libgomp.fortran/associate3.f90: New test. --- gcc/fortran/trans-openmp.c.jj 2016-06-30 19:39:19.000000000 +0200 +++ gcc/fortran/trans-openmp.c 2016-07-01 12:57:22.960295589 +0200 @@ -61,6 +61,7 @@ gfc_omp_privatize_by_reference (const_tr if (GFC_DECL_GET_SCALAR_POINTER (decl) || GFC_DECL_GET_SCALAR_ALLOCATABLE (decl) || GFC_DECL_CRAY_POINTEE (decl) + || GFC_DECL_ASSOCIATE_VAR_P (decl) || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) return false; --- libgomp/testsuite/libgomp.fortran/associate3.f90.jj 2016-07-01 13:36:26.208044233 +0200 +++ libgomp/testsuite/libgomp.fortran/associate3.f90 2016-07-01 13:45:07.274602305 +0200 @@ -0,0 +1,20 @@ +! PR fortran/71717 +! { dg-do run } + + type t + real, allocatable :: f(:) + end type + type (t) :: v + integer :: i, j + allocate (v%f(4)) + v%f = 19. + i = 5 + associate (u => v, k => i) + !$omp parallel do + do j = 1, 4 + u%f(j) = 21. + if (j.eq.1) k = 7 + end do + end associate + if (any (v%f(:).ne.21.) .or. i.ne.7) call abort +end Jakub