1! RUN: %python %S/../test_errors.py %s %flang -fopenacc 2 3! Check OpenACC clause validity for the following construct and directive: 4! 2.11 Serial Loop 5 6program openacc_serial_loop_validity 7 8 implicit none 9 10 integer :: i, b 11 integer, parameter :: N = 256 12 integer, dimension(N) :: c 13 logical, dimension(N) :: d, e 14 integer :: async1 15 integer :: wait1, wait2 16 real :: reduction_r 17 logical :: reduction_l 18 logical :: ifCondition = .TRUE. 19 real(8), dimension(N) :: a 20 21 22 !$acc serial loop reduction(+: reduction_r) 23 do i = 1, N 24 reduction_r = a(i) + i 25 end do 26 27 !$acc serial loop reduction(*: reduction_r) 28 do i = 1, N 29 reduction_r = reduction_r * (a(i) + i) 30 end do 31 32 !$acc serial loop reduction(min: reduction_r) 33 do i = 1, N 34 reduction_r = min(reduction_r, a(i) * i) 35 end do 36 37 !$acc serial loop reduction(max: reduction_r) 38 do i = 1, N 39 reduction_r = max(reduction_r, a(i) * i) 40 end do 41 42 !$acc serial loop reduction(iand: b) 43 do i = 1, N 44 b = iand(b, c(i)) 45 end do 46 47 !$acc serial loop reduction(ior: b) 48 do i = 1, N 49 b = ior(b, c(i)) 50 end do 51 52 !$acc serial loop reduction(ieor: b) 53 do i = 1, N 54 b = ieor(b, c(i)) 55 end do 56 57 !$acc serial loop reduction(.and.: reduction_l) 58 do i = 1, N 59 reduction_l = d(i) .and. e(i) 60 end do 61 62 !$acc serial loop reduction(.or.: reduction_l) 63 do i = 1, N 64 reduction_l = d(i) .or. e(i) 65 end do 66 67 !$acc serial loop reduction(.eqv.: reduction_l) 68 do i = 1, N 69 reduction_l = d(i) .eqv. e(i) 70 end do 71 72 !$acc serial loop reduction(.neqv.: reduction_l) 73 do i = 1, N 74 reduction_l = d(i) .neqv. e(i) 75 end do 76 77 !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the SERIAL LOOP directive 78 !$acc serial loop device_type(*) if(.TRUE.) 79 do i = 1, N 80 a(i) = 3.14 81 end do 82 !$acc end serial loop 83 84 !$acc serial loop if(ifCondition) 85 do i = 1, N 86 a(i) = 3.14 87 end do 88 !$acc end serial loop 89 90 !$acc serial loop 91 do i = 1, N 92 a(i) = 3.14 93 end do 94 !ERROR: Unmatched END PARALLEL LOOP directive 95 !$acc end parallel loop 96 97 !$acc serial loop 98 do i = 1, N 99 a(i) = 3.14 100 end do 101 !$acc end serial loop 102 103 !$acc serial loop 104 do i = 1, N 105 a(i) = 3.14 106 end do 107 !$acc end serial 108 109 !$acc serial loop 110 do i = 1, n 111 if(i == 10) cycle 112 end do 113 114end program openacc_serial_loop_validity 115