diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-05-03 14:51:33 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-05-03 14:51:33 +0200 |
commit | 693d710f2ad03341b24d45d1b2ab75533d67687e (patch) | |
tree | 5d4261cec1895613e4c02fd637f62bdfa2874e9b /libgomp/testsuite/libgomp.fortran | |
parent | 832a0c1d090950cef0735c66b16955944b063579 (diff) | |
download | gcc-693d710f2ad03341b24d45d1b2ab75533d67687e.zip gcc-693d710f2ad03341b24d45d1b2ab75533d67687e.tar.gz gcc-693d710f2ad03341b24d45d1b2ab75533d67687e.tar.bz2 |
re PR fortran/27395 (Problem with arrays in the OpenMP REDUCTION clause in Fortran)
PR fortran/27395
* gimplify.c (gimplify_scan_omp_clauses): Compare OMP_CLAUSE_CODE
rather than TREE_CODE to OMP_CLAUSE_REDUCTION. Set also GOVD_SEEN
bit for OMP_CLAUSE_REDUCTION_PLACEHOLDER.
* testsuite/libgomp.fortran/pr27395-1.f90: New test.
* testsuite/libgomp.fortran/pr27395-2.f90: New test.
From-SVN: r113494
Diffstat (limited to 'libgomp/testsuite/libgomp.fortran')
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/pr27395-1.f90 | 31 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/pr27395-2.f90 | 30 |
2 files changed, 61 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.fortran/pr27395-1.f90 b/libgomp/testsuite/libgomp.fortran/pr27395-1.f90 new file mode 100644 index 0000000..380a107 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/pr27395-1.f90 @@ -0,0 +1,31 @@ +! PR fortran/27395 +! { dg-do run } + +program pr27395_1 + implicit none + integer, parameter :: n=10,m=1001 + integer :: i + integer, dimension(n) :: sumarray + call foo(n,m,sumarray) + do i=1,n + if (sumarray(i).ne.m*i) call abort + end do +end program pr27395_1 + +subroutine foo(n,m,sumarray) + use omp_lib, only : omp_get_thread_num + implicit none + integer, intent(in) :: n,m + integer, dimension(n), intent(out) :: sumarray + integer :: i,j + sumarray(:)=0 +!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(4) +!$OMP DO PRIVATE(j,i), REDUCTION(+:sumarray) + do j=1,m + do i=1,n + sumarray(i)=sumarray(i)+i + end do + end do +!$OMP END DO +!$OMP END PARALLEL +end subroutine foo diff --git a/libgomp/testsuite/libgomp.fortran/pr27395-2.f90 b/libgomp/testsuite/libgomp.fortran/pr27395-2.f90 new file mode 100644 index 0000000..b3cb255 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/pr27395-2.f90 @@ -0,0 +1,30 @@ +! PR fortran/27395 +! { dg-do run } + +program pr27395_2 + implicit none + integer, parameter :: n=10,m=1001 + integer :: i + call foo(n,m) +end program pr27395_2 + +subroutine foo(n,m) + use omp_lib, only : omp_get_thread_num + implicit none + integer, intent(in) :: n,m + integer :: i,j + integer, dimension(n) :: sumarray + sumarray(:)=0 +!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(4) +!$OMP DO PRIVATE(j,i), REDUCTION(+:sumarray) + do j=1,m + do i=1,n + sumarray(i)=sumarray(i)+i + end do + end do +!$OMP END DO +!$OMP END PARALLEL + do i=1,n + if (sumarray(i).ne.m*i) call abort + end do +end subroutine foo |