1! { dg-do compile } 2! { dg-options "-fmax-errors=1000 -fopenmp -ffree-line-length-160" } 3 4module udr6 5 type dt 6 integer :: i 7 end type 8end module udr6 9subroutine f1 10 use udr6, only : dt 11!$omp declare reduction (+:integer:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 12!$omp declare reduction (+:real(kind=4):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 13!$omp declare reduction (+:double precision:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 14!$omp declare reduction (+:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" } 15!$omp & :omp_out = omp_out + omp_in) 16!$omp declare reduction (+:complex:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 17!$omp declare reduction (+:complex(kind=8):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 18 interface operator(+) 19 function addf1 (x, y) 20 use udr6, only : dt 21 type(dt), intent (in) :: x, y 22 type(dt) :: addf1 23 end function 24 end interface 25end subroutine f1 26subroutine f2 27 use udr6, only : dt 28 interface operator(-) 29 function subf2 (x, y) 30 use udr6, only : dt 31 type(dt), intent (in) :: x, y 32 type(dt) :: subf2 33 end function 34 end interface 35!$omp declare reduction (-:integer:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 36!$omp declare reduction (-:real(kind=4):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 37!$omp declare reduction (-:double precision:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 38!$omp declare reduction (-:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" } 39!$omp & :omp_out = omp_out + omp_in) 40!$omp declare reduction (-:complex:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 41!$omp declare reduction (-:complex(kind=8):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" } 42end subroutine f2 43subroutine f3 44 use udr6, only : dt 45 interface operator(*) 46 function mulf3 (x, y) 47 use udr6, only : dt 48 type(dt), intent (in) :: x, y 49 type(dt) :: mulf3 50 end function 51 end interface 52!$omp declare reduction (*:integer:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" } 53!$omp declare reduction (*:real(kind=4):omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" } 54!$omp declare reduction (*:double precision:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" } 55!$omp declare reduction (*:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" } 56!$omp & :omp_out = omp_out * omp_in) 57!$omp declare reduction (*:complex:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" } 58!$omp declare reduction (*:complex(kind=8):omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" } 59end subroutine f3 60subroutine f4 61 use udr6, only : dt 62 interface operator(.and.) 63 function andf4 (x, y) 64 use udr6, only : dt 65 type(dt), intent (in) :: x, y 66 type(dt) :: andf4 67 end function 68 end interface 69!$omp declare reduction (.neqv.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" } 70 interface operator(.or.) 71 function orf4 (x, y) 72 use udr6, only : dt 73 type(dt), intent (in) :: x, y 74 type(dt) :: orf4 75 end function 76 end interface 77!$omp declare reduction (.eqv.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" } 78 interface operator(.eqv.) 79 function eqvf4 (x, y) 80 use udr6, only : dt 81 type(dt), intent (in) :: x, y 82 type(dt) :: eqvf4 83 end function 84 end interface 85!$omp declare reduction (.or.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" } 86 interface operator(.neqv.) 87 function neqvf4 (x, y) 88 use udr6, only : dt 89 type(dt), intent (in) :: x, y 90 type(dt) :: neqvf4 91 end function 92 end interface 93!$omp declare reduction (.and.:logical:omp_out = omp_out .and. omp_in) ! { dg-error "Redefinition of predefined" } 94end subroutine f4 95subroutine f5 96 use udr6, only : dt 97 interface operator(.and.) 98 function andf5 (x, y) 99 use udr6, only : dt 100 type(dt), intent (in) :: x, y 101 type(dt) :: andf5 102 end function 103 end interface 104!$omp declare reduction (.neqv.:logical(kind =4):omp_out = omp_out .neqv. omp_in) ! { dg-error "Redefinition of predefined" } 105 interface operator(.or.) 106 function orf5 (x, y) 107 use udr6, only : dt 108 type(dt), intent (in) :: x, y 109 type(dt) :: orf5 110 end function 111 end interface 112!$omp declare reduction (.eqv.:logical(kind= 4):omp_out = omp_out .eqv. omp_in) ! { dg-error "Redefinition of predefined" } 113 interface operator(.eqv.) 114 function eqvf5 (x, y) 115 use udr6, only : dt 116 type(dt), intent (in) :: x, y 117 type(dt) :: eqvf5 118 end function 119 end interface 120!$omp declare reduction (.or.:logical(kind=4):omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" } 121 interface operator(.neqv.) 122 function neqvf5 (x, y) 123 use udr6, only : dt 124 type(dt), intent (in) :: x, y 125 type(dt) :: neqvf5 126 end function 127 end interface 128!$omp declare reduction (.and.:logical(kind = 4):omp_out = omp_out .and. omp_in) ! { dg-error "Redefinition of predefined" } 129end subroutine f5 130subroutine f6 131!$omp declare reduction (min:integer:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 132!$omp declare reduction (max:integer:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 133!$omp declare reduction (iand:integer:omp_out = iand (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 134!$omp declare reduction (ior:integer:omp_out = ior (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 135!$omp declare reduction (ieor:integer:omp_out = ieor (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 136!$omp declare reduction (min:real:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 137!$omp declare reduction (max:real:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 138!$omp declare reduction (min:double precision:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 139!$omp declare reduction (max:double precision:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 140end subroutine f6 141subroutine f7 142!$omp declare reduction (min:integer(kind=2):omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 143!$omp declare reduction (max:integer(kind=4):omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 144!$omp declare reduction (iand:integer(kind=1):omp_out = iand (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 145!$omp declare reduction (ior:integer(kind=8):omp_out = ior (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 146!$omp declare reduction (ieor:integer(kind=4):omp_out = ieor (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 147!$omp declare reduction (min:real(kind=4):omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 148!$omp declare reduction (max:real(kind=4):omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 149!$omp declare reduction (min:double precision:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 150!$omp declare reduction (max:double precision:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" } 151end subroutine f7 152subroutine f8 153 integer :: min 154!$omp declare reduction (min:integer:omp_out = omp_out + omp_in) 155!$omp declare reduction (min:real:omp_out = omp_out + omp_in) 156!$omp declare reduction (min:double precision:omp_out = omp_out + omp_in) 157end subroutine f8 158subroutine f9 159 integer :: max 160!$omp declare reduction (max:integer:omp_out = omp_out + omp_in) 161!$omp declare reduction (max:real:omp_out = omp_out + omp_in) 162!$omp declare reduction (max:double precision:omp_out = omp_out + omp_in) 163end subroutine f9 164subroutine f10 165 integer :: iand 166!$omp declare reduction (iand:integer:omp_out = omp_out + omp_in) 167!$omp declare reduction (iand:real:omp_out = omp_out + omp_in) 168end subroutine f10 169subroutine f11 170 integer :: ior 171!$omp declare reduction (ior:integer:omp_out = omp_out + omp_in) 172!$omp declare reduction (ior:real:omp_out = omp_out + omp_in) 173end subroutine f11 174subroutine f12 175 integer :: ieor 176!$omp declare reduction (ieor:integer:omp_out = omp_out + omp_in) 177!$omp declare reduction (ieor:real:omp_out = omp_out + omp_in) 178end subroutine f12 179subroutine f13 180!$omp declare reduction (min:integer:omp_out = omp_out + omp_in) 181!$omp declare reduction (min:real:omp_out = omp_out + omp_in) 182!$omp declare reduction (min:double precision:omp_out = omp_out + omp_in) 183 integer :: min 184end subroutine f13 185subroutine f14 186!$omp declare reduction (max:integer:omp_out = omp_out + omp_in) 187!$omp declare reduction (max:real:omp_out = omp_out + omp_in) 188!$omp declare reduction (max:double precision:omp_out = omp_out + omp_in) 189 integer :: max 190end subroutine f14 191subroutine f15 192!$omp declare reduction (iand:integer:omp_out = omp_out + omp_in) 193!$omp declare reduction (iand:real:omp_out = omp_out + omp_in) 194 integer :: iand 195end subroutine f15 196subroutine f16 197!$omp declare reduction (ior:integer:omp_out = omp_out + omp_in) 198!$omp declare reduction (ior:real:omp_out = omp_out + omp_in) 199 integer :: ior 200end subroutine f16 201subroutine f17 202!$omp declare reduction (ieor:integer:omp_out = omp_out + omp_in) 203!$omp declare reduction (ieor:real:omp_out = omp_out + omp_in) 204 integer :: ieor 205end subroutine f17 206