| ! RUN: %flang_fc1 -fdebug-dump-symbols -fopenmp -fopenmp-version=50 %s | FileCheck %s |
| |
| module m1 |
| interface operator(.fluffy.) |
| !CHECK: .fluffy., PUBLIC (Function): Generic DefinedOp procs: my_mul |
| procedure my_mul |
| end interface |
| type t1 |
| integer :: val = 1 |
| end type |
| !$omp declare reduction(.fluffy.:t1:omp_out=omp_out.fluffy.omp_in) |
| !CHECK: op.fluffy., PUBLIC: UserReductionDetails TYPE(t1) |
| !CHECK: t1, PUBLIC: DerivedType components: val |
| !CHECK: OtherConstruct scope: size=8 alignment=4 sourceRange=0 bytes |
| !CHECK: omp_in size=4 offset=0: ObjectEntity type: TYPE(t1) |
| !CHECK: omp_out size=4 offset=4: ObjectEntity type: TYPE(t1) |
| contains |
| function my_mul(x, y) |
| type (t1), intent (in) :: x, y |
| type (t1) :: my_mul |
| my_mul%val = x%val * y%val |
| end function my_mul |
| |
| subroutine subr(a, r) |
| implicit none |
| type(t1), intent(in), dimension(10) :: a |
| type(t1), intent(out) :: r |
| integer :: i |
| !$omp parallel do reduction(.fluffy.:r) |
| do i=1,10 |
| r = r .fluffy. a(i) |
| end do |
| end subroutine subr |
| end module m1 |