mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
832a0c1d09
commit
693d710f2a
|
@ -1,3 +1,10 @@
|
||||||
|
2006-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
2006-05-02 Daniel Berlin <dberlin@dberlin.org>
|
2006-05-02 Daniel Berlin <dberlin@dberlin.org>
|
||||||
|
|
||||||
Fix PR tree-optimization/26626
|
Fix PR tree-optimization/26626
|
||||||
|
|
|
@ -4510,11 +4510,11 @@ gimplify_scan_omp_clauses (tree *list_p, tree *pre_p, bool in_parallel)
|
||||||
&& DECL_BY_REFERENCE (TREE_OPERAND (decl, 0)))
|
&& DECL_BY_REFERENCE (TREE_OPERAND (decl, 0)))
|
||||||
OMP_CLAUSE_DECL (c) = decl = TREE_OPERAND (decl, 0);
|
OMP_CLAUSE_DECL (c) = decl = TREE_OPERAND (decl, 0);
|
||||||
omp_add_variable (ctx, decl, flags);
|
omp_add_variable (ctx, decl, flags);
|
||||||
if (TREE_CODE (c) == OMP_CLAUSE_REDUCTION
|
if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
|
||||||
&& OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
|
&& OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
|
||||||
{
|
{
|
||||||
omp_add_variable (ctx, OMP_CLAUSE_REDUCTION_PLACEHOLDER (c),
|
omp_add_variable (ctx, OMP_CLAUSE_REDUCTION_PLACEHOLDER (c),
|
||||||
GOVD_LOCAL);
|
GOVD_LOCAL | GOVD_SEEN);
|
||||||
gimplify_omp_ctxp = ctx;
|
gimplify_omp_ctxp = ctx;
|
||||||
push_gimplify_context ();
|
push_gimplify_context ();
|
||||||
gimplify_stmt (&OMP_CLAUSE_REDUCTION_INIT (c));
|
gimplify_stmt (&OMP_CLAUSE_REDUCTION_INIT (c));
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2006-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR fortran/27395
|
||||||
|
* testsuite/libgomp.fortran/pr27395-1.f90: New test.
|
||||||
|
* testsuite/libgomp.fortran/pr27395-2.f90: New test.
|
||||||
|
|
||||||
2006-05-02 Jakub Jelinek <jakub@redhat.com>
|
2006-05-02 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c++/26943
|
PR c++/26943
|
||||||
|
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue