xref: /llvm-project/flang/test/Semantics/OpenMP/copyprivate03.f90 (revision 0ee6646d6fb3b0b9a3655b14bd1cbc18a4e99600)
1! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
2! OpenMP Version 4.5
3! 2.15.4.2 copyprivate Clause
4! All list items that appear in the copyprivate clause must be either
5! threadprivate or private in the enclosing context.
6
7program omp_copyprivate
8  integer :: a(10), b(10)
9  integer, save :: k
10
11  !$omp threadprivate(k)
12
13  k = 10
14  a = 10
15  b = a + 10
16
17  !$omp parallel
18  !$omp single
19  a = a + k
20  !$omp end single copyprivate(k)
21  !$omp single
22  b = b - a
23  !ERROR: COPYPRIVATE variable 'b' is not PRIVATE or THREADPRIVATE in outer context
24  !$omp end single copyprivate(b)
25  !$omp end parallel
26
27  !$omp parallel sections private(a)
28  !$omp section
29  !$omp parallel
30  !$omp single
31  a = a * b + k
32  !ERROR: COPYPRIVATE variable 'a' is not PRIVATE or THREADPRIVATE in outer context
33  !$omp end single copyprivate(a)
34  !$omp end parallel
35  !$omp end parallel sections
36
37  !The use of FIRSTPRIVATE with COPYPRIVATE is allowed
38  !$omp parallel firstprivate(a)
39  !$omp single
40  a = a + k
41  !$omp end single copyprivate(a)
42  !$omp end parallel
43
44  print *, a, b
45
46end program omp_copyprivate
47