Retro68/gcc/libgomp/testsuite/libgomp.fortran/udr10.f90

33 lines
780 B
Fortran
Raw Normal View History

2014-09-21 17:33:12 +00:00
! { dg-do run }
module udr10m
type dt
integer :: x = 0
end type
!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
!$omp declare reduction(+:dt:omp_out=omp_out+omp_in)
interface operator(+)
module procedure addme
end interface
interface operator(.add.)
module procedure addme
end interface
contains
type(dt) function addme (x, y)
type (dt), intent (in) :: x, y
addme%x = x%x + y%x
end function addme
end module udr10m
program udr10
use udr10m, only : operator(.localadd.) => operator(.add.), &
& operator(+), dl => dt
type(dl) :: j, k
integer :: i
!$omp parallel do reduction(+:j) reduction(.localadd.:k)
do i = 1, 100
j = j .localadd. dl(i)
k = k + dl(i * 2)
end do
2018-12-28 15:30:48 +00:00
if (j%x /= 5050 .or. k%x /= 10100) STOP 1
2014-09-21 17:33:12 +00:00
end