! RUN: %python %S/../test_errors.py %s %flang -fopenacc
! Check OpenACC reduction validity.
program openacc_reduction_validity
integer :: i
real :: r
complex :: c
logical :: l
!$acc parallel reduction(+:i)
!$acc end parallel
!$acc parallel reduction(*:i)
!$acc end parallel
!$acc parallel reduction(min:i)
!$acc end parallel
!$acc parallel reduction(max:i)
!$acc end parallel
!$acc parallel reduction(iand:i)
!$acc end parallel
!$acc parallel reduction(ior:i)
!$acc end parallel
!$acc parallel reduction(ieor:i)
!$acc end parallel
!ERROR: reduction operator not supported for integer type
!$acc parallel reduction(.and.:i)
!$acc end parallel
!ERROR: reduction operator not supported for integer type
!$acc parallel reduction(.or.:i)
!$acc end parallel
!ERROR: reduction operator not supported for integer type
!$acc parallel reduction(.eqv.:i)
!$acc end parallel
!ERROR: reduction operator not supported for integer type
!$acc parallel reduction(.neqv.:i)
!$acc end parallel
!$acc parallel reduction(+:r)
!$acc end parallel
!$acc parallel reduction(*:r)
!$acc end parallel
!$acc parallel reduction(min:r)
!$acc end parallel
!$acc parallel reduction(max:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(iand:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(ior:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(ieor:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(.and.:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(.or.:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(.eqv.:r)
!$acc end parallel
!ERROR: reduction operator not supported for real type
!$acc parallel reduction(.neqv.:r)
!$acc end parallel
!$acc parallel reduction(+:c)
!$acc end parallel
!$acc parallel reduction(*:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(min:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(max:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(iand:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(ior:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(ieor:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(.and.:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(.or.:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(.eqv.:c)
!$acc end parallel
!ERROR: reduction operator not supported for complex type
!$acc parallel reduction(.neqv.:c)
!$acc end parallel
!$acc parallel reduction(.and.:l)
!$acc end parallel
!$acc parallel reduction(.or.:l)
!$acc end parallel
!$acc parallel reduction(.eqv.:l)
!$acc end parallel
!$acc parallel reduction(.neqv.:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(+:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(*:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(min:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(max:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(iand:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(ior:l)
!$acc end parallel
!ERROR: reduction operator not supported for logical type
!$acc parallel reduction(ieor:l)
!$acc end parallel
end program