This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH committed] Bug 66680 - [5 Regression] ICE with openmp, a loop and a type bound procedure


I have committed the following patch to trunk. I am planning to commit it to the gcc5 branch and close the PR as FIXED next sunday if there is no objection.

Cheers,

Dominique

Index: gcc/testsuite/ChangeLog
===================================================================
--- gcc/testsuite/ChangeLog	(revision 232126)
+++ gcc/testsuite/ChangeLog	(working copy)
@@ -1,3 +1,8 @@
+2016-01-07  Dominique d'Humieres <dominiq@lps.ens.fr>
+
+	PR fortran/66680
+	gfortran.dg/gomp/pr66680.f90: New test.
+
 2016-01-07  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR target/69171
Index: gcc/testsuite/gfortran.dg/gomp/pr66680.f90
===================================================================
--- gcc/testsuite/gfortran.dg/gomp/pr66680.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/gomp/pr66680.f90	(working copy)
@@ -0,0 +1,46 @@
+! { dg-do run }
+! PR 66680: ICE with openmp, a loop and a type bound procedure
+! Contributed by Miha Polajnar <polajnar.miha@gmail.com>
+!
+module m1 
+  implicit none
+  integer :: n = 5
+  type :: t1
+  contains
+    procedure :: s => s1
+  end type t1
+contains
+  pure subroutine s1(self,p,esta)
+    class(t1), intent(in) :: self
+    integer, optional, intent(in) :: p
+    integer, intent(out) :: esta
+  end subroutine s1 
+end module m1
+module m2
+  use m1, only: t1, n
+  implicit none
+  type(t1), allocatable :: test(:)
+contains
+  pure subroutine s2(test1,esta)
+    type(t1), intent(in) :: test1
+    integer, intent(out) :: esta
+    integer :: p, i
+    do p = 1, n
+      i = p ! using i instead of p works
+      call test1%s(p=p,esta=esta)
+      if ( esta /= 0 ) return
+    end do
+  end subroutine s2
+  subroutine s3()
+    integer :: i, esta
+    !$omp parallel do  &
+    !$omp private(i)
+    do i = 1, n
+        call s2(test(i),esta)
+    end do
+    !$omp end parallel do
+  end subroutine s3
+end module m2
+program main
+  implicit none
+end program main


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]