This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[committed] Re: A gfortran silent "wrong code" bug in the transition from 4.9.0 -> 4.9.1, using OpenMP. (PR fortran/71717)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Toon Moene <toon at moene dot org>
- Cc: fortran at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Fri, 1 Jul 2016 17:17:04 +0200
- Subject: [committed] Re: A gfortran silent "wrong code" bug in the transition from 4.9.0 -> 4.9.1, using OpenMP. (PR fortran/71717)
- Authentication-results: sourceware.org; auth=none
- References: <45f3c5ba-af62-a02f-bd37-633ebb7f7f56 at moene dot org> <20160630184358 dot GS7387 at tucnak dot redhat dot com> <2de277bd-617f-0cb4-f5b6-1b1e94ce98e2 at moene dot org>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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 <jakub@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