1! RUN: %python %S/../test_errors.py %s %flang -fopenmp 2 3! Check the association between OpenMPLoopConstruct and DoConstruct 4 5 integer :: b = 128 6 integer :: c = 32 7 integer, parameter :: num = 16 8 N = 1024 9 10! Different DO loops 11 12 !$omp parallel 13 !$omp do 14 do 10 i=1, N 15 a = 3.14 1610 print *, a 17 !$omp end parallel 18 19 !$omp parallel do 20 DO CONCURRENT (i = 1:N) 21 a = 3.14 22 END DO 23 24 !$omp parallel do simd 25 outer: DO WHILE (c > 1) 26 inner: do while (b > 100) 27 a = 3.14 28 b = b - 1 29 enddo inner 30 c = c - 1 31 END DO outer 32 33 c = 16 34 !ERROR: DO loop after the PARALLEL DO directive must have loop control 35 !$omp parallel do 36 do 37 a = 3.14 38 c = c - 1 39 if (c < 1) exit 40 enddo 41 42! Loop association check 43 44 ! If an end do directive follows a do-construct in which several DO 45 ! statements share a DO termination statement, then a do directive 46 ! can only be specified for the outermost of these DO statements. 47 do 100 i=1, N 48 !$omp do 49 do 100 j=1, N 50 a = 3.14 51100 continue 52 !ERROR: The ENDDO directive must follow the DO loop associated with the loop construct 53 !$omp enddo 54 55 !$omp parallel do copyin(a) 56 do i = 1, N 57 !$omp parallel do 58 do j = 1, i 59 enddo 60 !$omp end parallel do 61 a = 3. 62 enddo 63 !$omp end parallel do 64 65 !$omp parallel do 66 do i = 1, N 67 enddo 68 !$omp end parallel do 69 !ERROR: The END PARALLEL DO directive must follow the DO loop associated with the loop construct 70 !$omp end parallel do 71 72 !$omp parallel 73 a = 3.0 74 !$omp do simd 75 do i = 1, N 76 enddo 77 !$omp end do simd 78 79 !$omp parallel do copyin(a) 80 do i = 1, N 81 enddo 82 !$omp end parallel 83 84 a = 0.0 85 !ERROR: The END PARALLEL DO directive must follow the DO loop associated with the loop construct 86 !$omp end parallel do 87 !$omp parallel do private(c) 88 do i = 1, N 89 do j = 1, N 90 !ERROR: A DO loop must follow the PARALLEL DO directive 91 !$omp parallel do shared(b) 92 a = 3.14 93 enddo 94 !ERROR: The END PARALLEL DO directive must follow the DO loop associated with the loop construct 95 !$omp end parallel do 96 enddo 97 a = 1.414 98 !ERROR: The END PARALLEL DO directive must follow the DO loop associated with the loop construct 99 !$omp end parallel do 100 101 do i = 1, N 102 !$omp parallel do 103 do j = 2*i*N, (2*i+1)*N 104 a = 3.14 105 enddo 106 enddo 107 !ERROR: The END PARALLEL DO directive must follow the DO loop associated with the loop construct 108 !$omp end parallel do 109 110 !ERROR: A DO loop must follow the PARALLEL DO directive 111 !$omp parallel do private(c) 1125 FORMAT (1PE12.4, I10) 113 do i=1, N 114 a = 3.14 115 enddo 116 !ERROR: The END PARALLEL DO directive must follow the DO loop associated with the loop construct 117 !$omp end parallel do 118 119 !$omp parallel do simd 120 do i = 1, N 121 a = 3.14 122 enddo 123 !$omp end parallel do simd 124 !ERROR: The END PARALLEL DO SIMD directive must follow the DO loop associated with the loop construct 125 !$omp end parallel do simd 126end 127