1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
! Check the association between OpenMPLoopConstruct and DoConstruct
integer :: b = 128
integer :: c = 32
integer, parameter :: num = 16
N = 1024
! Different DO loops
!$omp parallel
!$omp do
do 10 i=1, N
a = 3.14
10 print *, a
!$omp end parallel
!$omp parallel do
!ERROR: DO CONCURRENT loops cannot form part of a loop nest.
DO CONCURRENT (i = 1:N)
a = 3.14
END DO
!$omp parallel do simd
!ERROR: The associated loop of a loop-associated directive cannot be a DO WHILE.
outer: DO WHILE (c > 1)
inner: do while (b > 100)
a = 3.14
b = b - 1
enddo inner
c = c - 1
END DO outer
! Accept directives between parallel do and actual loop.
!ERROR: A DO loop must follow the PARALLEL DO directive
!$OMP PARALLEL DO
!WARNING: Unrecognized compiler directive was ignored [-Wignored-directive]
!ERROR: Compiler directives are not allowed inside OpenMP loop constructs
!DIR$ VECTOR ALIGNED
DO 20 i=1,N
a = a + 0.5
20 CONTINUE
!$OMP END PARALLEL DO
c = 16
!$omp parallel do
!ERROR: Loop control is not present in the DO LOOP
!ERROR: The associated loop of a loop-associated directive cannot be a DO without control.
do
a = 3.14
c = c - 1
!ERROR: EXIT to construct outside of PARALLEL DO construct is not allowed
!ERROR: EXIT statement terminates associated loop of an OpenMP DO construct
if (c < 1) exit
enddo
! Loop association check
! If an end do directive follows a do-construct in which several DO
! statements share a DO termination statement, then a do directive
! can only be specified for the outermost of these DO statements.
do 100 i=1, N
!$omp do
do 100 j=1, N
a = 3.14
100 continue
!$omp enddo
!ERROR: Non-THREADPRIVATE object 'a' in COPYIN clause
!$omp parallel do copyin(a)
do i = 1, N
!$omp parallel do
do j = 1, i
enddo
!$omp end parallel do
a = 3.
enddo
!$omp end parallel do
!$omp parallel do
do i = 1, N
enddo
!$omp end parallel do
!$omp parallel
a = 3.0
!$omp do simd
do i = 1, N
enddo
!$omp end do simd
!ERROR: Non-THREADPRIVATE object 'a' in COPYIN clause
!$omp parallel do copyin(a)
do i = 1, N
enddo
!$omp end parallel
a = 0.0
!$omp parallel do private(c)
do i = 1, N
do j = 1, N
!ERROR: OpenMP loop construct should contain a DO-loop or a loop-nest-generating OpenMP construct
!$omp parallel do shared(b)
a = 3.14
enddo
enddo
a = 1.414
do i = 1, N
!$omp parallel do
do j = 2*i*N, (2*i+1)*N
a = 3.14
enddo
enddo
!ERROR: OpenMP loop construct should contain a DO-loop or a loop-nest-generating OpenMP construct
!$omp parallel do private(c)
5 FORMAT (1PE12.4, I10)
do i=1, N
a = 3.14
enddo
!$omp parallel do simd
do i = 1, N
a = 3.14
enddo
!$omp end parallel do simd
!ERROR: OpenMP loop construct should contain a DO-loop or a loop-nest-generating OpenMP construct
!$omp simd
!$omp end simd
a = i + 1
end
|