1! RUN: %python %S/../test_errors.py %s %flang -fopenacc 2 3! Check OpenACC canonalization validity for the construct defined below: 4! 2.9 Loop 5! 2.11 Parallel Loop 6! 2.11 Kernels Loop 7! 2.11 Serial Loop 8 9program openacc_clause_validity 10 11 implicit none 12 13 integer :: i, j 14 integer :: N = 256 15 real(8) :: a(256) 16 real(8) :: aa(256, 256) 17 18 i = 0 19 20 !ERROR: DO loop after the LOOP directive must have loop control 21 !$acc loop 22 do 23 end do 24 25 !$acc parallel loop 26 do i = 1, N 27 a(i) = 3.14 28 end do 29 30 !$acc kernels loop 31 do i = 1, N 32 a(i) = 3.14 33 end do 34 35 !$acc serial loop 36 do i = 1, N 37 a(i) = 3.14 38 end do 39 40 !$acc parallel loop 41 do i = 1, N 42 a(i) = 3.14 43 end do 44 !$acc end parallel loop 45 46 !$acc kernels loop 47 do i = 1, N 48 a(i) = 3.14 49 end do 50 !$acc end kernels loop 51 52 !$acc serial loop 53 do i = 1, N 54 a(i) = 3.14 55 end do 56 !$acc end serial loop 57 58 !ERROR: DO loop after the PARALLEL LOOP directive must have loop control 59 !$acc parallel loop 60 do 61 end do 62 63 !ERROR: DO loop after the KERNELS LOOP directive must have loop control 64 !$acc kernels loop 65 do 66 end do 67 68 !ERROR: DO loop after the SERIAL LOOP directive must have loop control 69 !$acc serial loop 70 do 71 end do 72 73 !$acc parallel 74 !ERROR: The loop construct with the TILE clause must be followed by 2 tightly-nested loops 75 !$acc loop tile(2, 2) 76 do i = 1, N 77 a(i) = 3.14 78 end do 79 !$acc end parallel 80 81 !ERROR: The loop construct with the TILE clause must be followed by 2 tightly-nested loops 82 !$acc parallel loop tile(2, 2) 83 do i = 1, N 84 a(i) = 3.14 85 end do 86 87 !$acc parallel 88 !ERROR: TILE and COLLAPSE clause may not appear on loop construct associated with DO CONCURRENT 89 !$acc loop collapse(2) 90 do concurrent (i = 1:N, j = 1:N) 91 aa(i, j) = 3.14 92 end do 93 !$acc end parallel 94 95 !$acc parallel 96 !ERROR: TILE and COLLAPSE clause may not appear on loop construct associated with DO CONCURRENT 97 !$acc loop tile(2, 2) 98 do concurrent (i = 1:N, j = 1:N) 99 aa(i, j) = 3.14 100 end do 101 !$acc end parallel 102 103end program openacc_clause_validity 104