gcc/fortran/ChangeLog: * gfortran.h (gfc_omp_namelist): Add lastprivate_conditional. * openmp.c (gfc_match_omp_clauses): Handle 'conditional:' modifier of 'lastprivate'. * trans-openmp.c (gfc_omp_clause_default_ctor): Don't assert on OMP_CLAUSE__CONDTEMP_ and other OMP_*TEMP_. (gfc_trans_omp_variable_list): Handle lastprivate_conditional. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/lastprivate-conditional-1.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-2.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-3.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-4.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-5.f90: New test.
66 lines
1.8 KiB
Fortran
66 lines
1.8 KiB
Fortran
subroutine foo
|
|
integer i, j, k
|
|
!$omp parallel
|
|
!$omp do lastprivate (conditional: i) ! { dg-warning "conditional 'lastprivate' on loop iterator 'i' ignored" }
|
|
do i = 1, 32
|
|
end do
|
|
!$omp do collapse (3) lastprivate (conditional: i) ! { dg-warning "conditional 'lastprivate' on loop iterator 'i' ignored" }
|
|
do i = 1, 32
|
|
do j = 1, 32
|
|
do k = 1, 32
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp do collapse (3) lastprivate (conditional: j) ! { dg-warning "conditional 'lastprivate' on loop iterator 'j' ignored" }
|
|
do i = 1, 32
|
|
do j = 1, 32
|
|
do k = 1, 32
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp do collapse (3) lastprivate (conditional: k) ! { dg-warning "conditional 'lastprivate' on loop iterator 'k' ignored" }
|
|
do i = 1, 32
|
|
do j = 1, 32
|
|
do k = 1, 32
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end parallel
|
|
|
|
! Error in eqiv. C code: "conditional 'lastprivate' on loop iterator 'i' ignored"
|
|
!$omp parallel do lastprivate (conditional: i)
|
|
do i = 1, 32
|
|
end do
|
|
!$omp end parallel do
|
|
|
|
! Error in eqiv. C code: "conditional 'lastprivate' on loop iterator 'i' ignored"
|
|
!$omp parallel do collapse (3) lastprivate (conditional: i)
|
|
do i = 1, 32
|
|
do j = 1, 32
|
|
do k = 1, 32
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end parallel do
|
|
|
|
! Error in eqiv. C code: "conditional 'lastprivate' on loop iterator 'j' ignored"
|
|
!$omp parallel do collapse (3) lastprivate (conditional: j)
|
|
do i = 1, 32
|
|
do j = 1, 32
|
|
do k = 1, 32
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end parallel do
|
|
|
|
! Error in eqiv. C code: "conditional 'lastprivate' on loop iterator 'k' ignored"
|
|
!$omp parallel do collapse (3) lastprivate (conditional: k)
|
|
do i = 1, 32
|
|
do j = 1, 32
|
|
do k = 1, 32
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end parallel do
|
|
end subroutine
|