aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominique d'Humieres <dominiq@lps.ens.fr>2016-01-07 14:21:54 +0100
committerDominique d'Humieres <dominiq@gcc.gnu.org>2016-01-07 14:21:54 +0100
commit64d3ef31dffb75b1a16837564eac5b613d49cafc (patch)
tree07f9cf875468729492b07578cc3ac66791e049f0
parent4cd9ca92cf8cb9d691a5dbe04de114fc9ab817fc (diff)
downloadgcc-64d3ef31dffb75b1a16837564eac5b613d49cafc.zip
gcc-64d3ef31dffb75b1a16837564eac5b613d49cafc.tar.gz
gcc-64d3ef31dffb75b1a16837564eac5b613d49cafc.tar.bz2
re PR fortran/66680 (ICE with openmp, a loop and a type bound procedure)
2016-01-07 Dominique d'Humieres <dominiq@lps.ens.fr> PR fortran/66680 gfortran.dg/gomp/pr66680.f90: New test. From-SVN: r232127
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr66680.f9046
2 files changed, 51 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 53c1994..869d0fb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr66680.f90 b/gcc/testsuite/gfortran.dg/gomp/pr66680.f90
new file mode 100644
index 0000000..b068cb3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/pr66680.f90
@@ -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