re PR fortran/63861 (OpenACC coarray ICE (also with OpenMP?))
gcc/fortran/ PR fortran/63861 * openmp.c (gfc_match_omp_clauses): Allow subarrays for acc reductions. (resolve_omp_clauses): Error on any acc reductions on arrays. gcc/testsuite/ * gfortran.dg/goacc/array-reduction.f90: New test. * gfortran.dg/goacc/assumed.f95: Update expected diagnostics. * gfortran.dg/goacc/coarray.f95: Likewise. * gfortran.dg/goacc/coarray_2.f90: Likewise. * gfortran.dg/goacc/reduction-2.f95: Likewise. * gfortran.dg/goacc/reduction.f95: Likewise. From-SVN: r231204
This commit is contained in:
parent
e7fc41a776
commit
2f9bcf538c
9 changed files with 128 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-12-02 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
PR fortran/63861
|
||||
* openmp.c (gfc_match_omp_clauses): Allow subarrays for acc reductions.
|
||||
(resolve_omp_clauses): Error on any acc reductions on arrays.
|
||||
|
||||
2015-12-01 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
* dump-parse-tree.c (show_omp_clauses): Handle optional num and static
|
||||
|
|
|
@ -978,7 +978,8 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, uint64_t mask,
|
|||
|
||||
if (gfc_match_omp_variable_list (" :",
|
||||
&c->lists[OMP_LIST_REDUCTION],
|
||||
false, NULL, &head) == MATCH_YES)
|
||||
false, NULL, &head, openacc)
|
||||
== MATCH_YES)
|
||||
{
|
||||
gfc_omp_namelist *n;
|
||||
if (rop == OMP_REDUCTION_NONE)
|
||||
|
@ -3313,6 +3314,11 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
|
|||
n->sym->name, &n->where);
|
||||
else
|
||||
n->sym->mark = 1;
|
||||
|
||||
/* OpenACC does not support reductions on arrays. */
|
||||
if (n->sym->as)
|
||||
gfc_error ("Array %qs is not permitted in reduction at %L",
|
||||
n->sym->name, &n->where);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
2015-12-02 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
PR fortran/63861
|
||||
* gfortran.dg/goacc/array-reduction.f90: New test.
|
||||
* gfortran.dg/goacc/assumed.f95: Update expected diagnostics.
|
||||
* gfortran.dg/goacc/coarray.f95: Likewise.
|
||||
* gfortran.dg/goacc/coarray_2.f90: Likewise.
|
||||
* gfortran.dg/goacc/reduction-2.f95: Likewise.
|
||||
* gfortran.dg/goacc/reduction.f95: Likewise.
|
||||
|
||||
2015-12-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/68647
|
||||
|
|
74
gcc/testsuite/gfortran.dg/goacc/array-reduction.f90
Normal file
74
gcc/testsuite/gfortran.dg/goacc/array-reduction.f90
Normal file
|
@ -0,0 +1,74 @@
|
|||
program test
|
||||
implicit none
|
||||
integer a(10), i
|
||||
|
||||
a(:) = 0
|
||||
|
||||
! Array reductions.
|
||||
|
||||
!$acc parallel reduction (+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a = a + 1
|
||||
end do
|
||||
!$acc end parallel
|
||||
|
||||
!$acc parallel
|
||||
!$acc loop reduction (+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a = a + 1
|
||||
end do
|
||||
!$acc end parallel
|
||||
|
||||
!$acc kernels
|
||||
!$acc loop reduction (+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a = a + 1
|
||||
end do
|
||||
!$acc end kernels
|
||||
|
||||
! Subarray reductions.
|
||||
|
||||
!$acc parallel reduction (+:a(1:5)) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a = a + 1
|
||||
end do
|
||||
!$acc end parallel
|
||||
|
||||
!$acc parallel
|
||||
!$acc loop reduction (+:a(1:5)) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a = a + 1
|
||||
end do
|
||||
!$acc end parallel
|
||||
|
||||
!$acc kernels
|
||||
!$acc loop reduction (+:a(1:5)) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a = a + 1
|
||||
end do
|
||||
!$acc end kernels
|
||||
|
||||
! Reductions on array elements.
|
||||
|
||||
!$acc parallel reduction (+:a(1)) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a(1) = a(1) + 1
|
||||
end do
|
||||
!$acc end parallel
|
||||
|
||||
!$acc parallel
|
||||
!$acc loop reduction (+:a(1)) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a(1) = a(1) + 1
|
||||
end do
|
||||
!$acc end parallel
|
||||
|
||||
!$acc kernels
|
||||
!$acc loop reduction (+:a(1)) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1, 10
|
||||
a(1) = a(1) + 1
|
||||
end do
|
||||
!$acc end kernels
|
||||
|
||||
print *, a
|
||||
end program test
|
|
@ -45,3 +45,6 @@ contains
|
|||
!$acc update self (a) ! { dg-error "Assumed rank" }
|
||||
end subroutine assumed_rank
|
||||
end module test
|
||||
|
||||
! { dg-error "Array 'a' is not permitted in reduction" "" { target "*-*-*" } 18 }
|
||||
! { dg-error "Array 'a' is not permitted in reduction" "" { target "*-*-*" } 39 }
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
! { dg-additional-options "-fcoarray=single" }
|
||||
!
|
||||
! PR fortran/63861
|
||||
! { dg-xfail-if "<http://gcc.gnu.org/PR63861>" { *-*-* } }
|
||||
! { dg-excess-errors "TODO" }
|
||||
|
||||
module test
|
||||
contains
|
||||
|
@ -20,7 +18,7 @@ contains
|
|||
!$acc end parallel
|
||||
!$acc host_data use_device (a)
|
||||
!$acc end host_data
|
||||
!$acc parallel loop reduction(+:a)
|
||||
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1,5
|
||||
enddo
|
||||
!$acc end parallel loop
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
! { dg-additional-options "-fcoarray=lib" }
|
||||
!
|
||||
! PR fortran/63861
|
||||
! { dg-xfail-if "<http://gcc.gnu.org/PR63861>" { *-*-* } }
|
||||
! { dg-excess-errors "TODO" }
|
||||
|
||||
module test
|
||||
contains
|
||||
|
@ -20,7 +18,7 @@ contains
|
|||
!$acc end parallel
|
||||
!$acc host_data use_device (a)
|
||||
!$acc end host_data
|
||||
!$acc parallel loop reduction(+:a)
|
||||
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1,5
|
||||
enddo
|
||||
!$acc end parallel loop
|
||||
|
@ -72,7 +70,7 @@ contains
|
|||
!$acc end parallel
|
||||
!$acc host_data use_device (a)
|
||||
!$acc end host_data
|
||||
!$acc parallel loop reduction(+:a)
|
||||
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1,5
|
||||
enddo
|
||||
!$acc end parallel loop
|
||||
|
@ -94,7 +92,7 @@ contains
|
|||
!$acc end data
|
||||
!$acc parallel private (a)
|
||||
!$acc end parallel
|
||||
!$acc parallel loop reduction(+:a)
|
||||
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
|
||||
do i = 1,5
|
||||
enddo
|
||||
!$acc end parallel loop
|
||||
|
|
|
@ -17,6 +17,6 @@ end subroutine
|
|||
|
||||
! { dg-final { scan-tree-dump-times "target oacc_parallel firstprivate.a." 1 "gimple" } }
|
||||
! { dg-final { scan-tree-dump-times "acc loop private.p. reduction..:a." 1 "gimple" } }
|
||||
! { dg-final { scan-tree-dump-times "target oacc_kernels map.tofrom:a .len: 4.." 1 "gimple" } }
|
||||
! { dg-final { scan-tree-dump-times "target oacc_kernels map.force_tofrom:a .len: 4.." 1 "gimple" } }
|
||||
! { dg-final { scan-tree-dump-times "acc loop private.k. reduction..:a." 1 "gimple" } }
|
||||
|
||||
|
|
|
@ -136,3 +136,26 @@ common /blk/ i1
|
|||
!$acc end parallel
|
||||
|
||||
end subroutine
|
||||
|
||||
! { dg-error "Array 'ia2' is not permitted in reduction" "" { target "*-*-*" } 27 }
|
||||
! { dg-error "Array 'ra1' is not permitted in reduction" "" { target "*-*-*" } 29 }
|
||||
! { dg-error "Array 'ca1' is not permitted in reduction" "" { target "*-*-*" } 31 }
|
||||
! { dg-error "Array 'da1' is not permitted in reduction" "" { target "*-*-*" } 33 }
|
||||
! { dg-error "Array 'la1' is not permitted in reduction" "" { target "*-*-*" } 35 }
|
||||
! { dg-error "Array 'aa1' is not permitted in reduction" "" { target "*-*-*" } 65 }
|
||||
! { dg-error "Array 'ia1' is not permitted in reduction" "" { target "*-*-*" } 67 }
|
||||
! { dg-error "Array 'la1' is not permitted in reduction" "" { target "*-*-*" } 71 }
|
||||
! { dg-error "Array 'ta1' is not permitted in reduction" "" { target "*-*-*" } 77 }
|
||||
! { dg-error "Array 'ia2' is not permitted in reduction" "" { target "*-*-*" } 81 }
|
||||
! { dg-error "Array 'ra1' is not permitted in reduction" "" { target "*-*-*" } 85 }
|
||||
! { dg-error "Array 'da1' is not permitted in reduction" "" { target "*-*-*" } 89 }
|
||||
! { dg-error "Array 'ca1' is not permitted in reduction" "" { target "*-*-*" } 93 }
|
||||
! { dg-error "Array 'ta1' is not permitted in reduction" "" { target "*-*-*" } 99 }
|
||||
! { dg-error "Array 'ca1' is not permitted in reduction" "" { target "*-*-*" } 103 }
|
||||
! { dg-error "Array 'la1' is not permitted in reduction" "" { target "*-*-*" } 107 }
|
||||
! { dg-error "Array 'ta1' is not permitted in reduction" "" { target "*-*-*" } 113 }
|
||||
! { dg-error "Array 'ra1' is not permitted in reduction" "" { target "*-*-*" } 117 }
|
||||
! { dg-error "Array 'da1' is not permitted in reduction" "" { target "*-*-*" } 121 }
|
||||
! { dg-error "Array 'ca1' is not permitted in reduction" "" { target "*-*-*" } 125 }
|
||||
! { dg-error "Array 'la1' is not permitted in reduction" "" { target "*-*-*" } 129 }
|
||||
! { dg-error "Array 'ta1' is not permitted in reduction" "" { target "*-*-*" } 135 }
|
||||
|
|
Loading…
Add table
Reference in a new issue