brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 4e63caf Raw
150 lines · plain
1! RUN: %python %S/../test_errors.py %s %flang -fopenmp2 3! Check the association between OpenMPLoopConstruct and DoConstruct4 5  integer :: b = 1286  integer :: c = 327  integer, parameter :: num = 168  N = 10249 10! Different DO loops11 12  !$omp parallel13  !$omp do14  do 10 i=1, N15     a = 3.141610   print *, a17  !$omp end parallel18 19  !$omp parallel do20  !ERROR: DO CONCURRENT loops cannot form part of a loop nest.21  DO CONCURRENT (i = 1:N)22     a = 3.1423  END DO24 25  !$omp parallel do simd26  !ERROR: The associated loop of a loop-associated directive cannot be a DO WHILE.27  outer: DO WHILE (c > 1)28     inner: do while (b > 100)29        a = 3.1430        b = b - 131     enddo inner32     c = c - 133  END DO outer34 35  ! Accept directives between parallel do and actual loop.36  !$OMP PARALLEL DO37  !WARNING: Unrecognized compiler directive was ignored [-Wignored-directive]38  !WARNING: Compiler directives are not allowed inside OpenMP loop constructs39  !DIR$ VECTOR ALIGNED40  DO 20 i=1,N41     a = a + 0.54220   CONTINUE43  !$OMP END PARALLEL DO44 45  c = 1646  !$omp parallel do47  !ERROR: Loop control is not present in the DO LOOP48  !ERROR: The associated loop of a loop-associated directive cannot be a DO without control.49  do50     a = 3.1451     c = c - 152     !ERROR: EXIT to construct outside of PARALLEL DO construct is not allowed53     !ERROR: EXIT statement terminates associated loop of an OpenMP DO construct54     if (c < 1) exit55  enddo56 57! Loop association check58 59  ! If an end do directive follows a do-construct in which several DO60  ! statements share a DO termination statement, then a do directive61  ! can only be specified for the outermost of these DO statements.62  do 100 i=1, N63     !$omp do64     do 100 j=1, N65        a = 3.1466100     continue67    !$omp enddo68 69  !ERROR: Non-THREADPRIVATE object 'a' in COPYIN clause70  !$omp parallel do copyin(a)71  do i = 1, N72     !$omp parallel do73     do j = 1, i74     enddo75     !$omp end parallel do76     a = 3.77  enddo78  !$omp end parallel do79 80  !$omp parallel do81  do i = 1, N82  enddo83  !$omp end parallel do84  !ERROR: Misplaced OpenMP end-directive85  !$omp end parallel do86 87  !$omp parallel88  a = 3.089  !$omp do simd90  do i = 1, N91  enddo92  !$omp end do simd93 94  !ERROR: Non-THREADPRIVATE object 'a' in COPYIN clause95  !$omp parallel do copyin(a)96  do i = 1, N97  enddo98  !$omp end parallel99 100  a = 0.0101  !ERROR: Misplaced OpenMP end-directive102  !$omp end parallel do103  !$omp parallel do private(c)104  do i = 1, N105     do j = 1, N106        !ERROR: OpenMP loop construct should contain a DO-loop or a loop-nest-generating OpenMP construct107        !$omp parallel do shared(b)108        a = 3.14109     enddo110     !ERROR: Misplaced OpenMP end-directive111     !$omp end parallel do112  enddo113  a = 1.414114  !ERROR: Misplaced OpenMP end-directive115  !$omp end parallel do116 117  do i = 1, N118     !$omp parallel do119     do j = 2*i*N, (2*i+1)*N120        a = 3.14121     enddo122  enddo123  !ERROR: Misplaced OpenMP end-directive124  !$omp end parallel do125 126  !ERROR: OpenMP loop construct should contain a DO-loop or a loop-nest-generating OpenMP construct127  !$omp parallel do private(c)1285 FORMAT (1PE12.4, I10)129  do i=1, N130     a = 3.14131  enddo132  !ERROR: Misplaced OpenMP end-directive133  !$omp end parallel do134 135  !$omp parallel do simd136  do i = 1, N137     a = 3.14138  enddo139  !$omp end parallel do simd140  !ERROR: Misplaced OpenMP end-directive141  !$omp end parallel do simd142 143  !ERROR: OpenMP loop construct should contain a DO-loop or a loop-nest-generating OpenMP construct144  !$omp simd145    a = i + 1146  !ERROR: Misplaced OpenMP end-directive147  !$omp end simd148   a = i + 1149end150