xref: /llvm-project/flang/test/Semantics/OpenMP/threadprivate02.f90 (revision 9f0e59f3c1a56fd14025df973c9f944010efe09a)
1*3323a4bdSKiran Chandramohan! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
2*3323a4bdSKiran Chandramohan! OpenMP Version 5.1
3*3323a4bdSKiran Chandramohan! Check OpenMP construct validity for the following directives:
4*3323a4bdSKiran Chandramohan! 2.21.2 Threadprivate Directive
5*3323a4bdSKiran Chandramohan
6*3323a4bdSKiran Chandramohanprogram threadprivate02
7*3323a4bdSKiran Chandramohan  integer :: arr1(10)
8*3323a4bdSKiran Chandramohan  common /blk1/ a1
9*3323a4bdSKiran Chandramohan  real, save :: eq_a, eq_b, eq_c, eq_d
10*3323a4bdSKiran Chandramohan
11*3323a4bdSKiran Chandramohan  !$omp threadprivate(arr1)
12*3323a4bdSKiran Chandramohan
13*3323a4bdSKiran Chandramohan  !$omp threadprivate(/blk1/)
14*3323a4bdSKiran Chandramohan
15*3323a4bdSKiran Chandramohan  !$omp threadprivate(blk1)
16*3323a4bdSKiran Chandramohan
17*3323a4bdSKiran Chandramohan  !ERROR: A variable in a THREADPRIVATE directive cannot be an element of a common block
18*3323a4bdSKiran Chandramohan  !$omp threadprivate(a1)
19*3323a4bdSKiran Chandramohan
20*3323a4bdSKiran Chandramohan  equivalence(eq_a, eq_b)
21*3323a4bdSKiran Chandramohan  !ERROR: A variable in a THREADPRIVATE directive cannot appear in an EQUIVALENCE statement
22*3323a4bdSKiran Chandramohan  !$omp threadprivate(eq_a)
23*3323a4bdSKiran Chandramohan
24*3323a4bdSKiran Chandramohan  !ERROR: A variable in a THREADPRIVATE directive cannot appear in an EQUIVALENCE statement
25*3323a4bdSKiran Chandramohan  !$omp threadprivate(eq_c)
26*3323a4bdSKiran Chandramohan  equivalence(eq_c, eq_d)
27*3323a4bdSKiran Chandramohan
28*3323a4bdSKiran Chandramohancontains
29*3323a4bdSKiran Chandramohan  subroutine func()
30*3323a4bdSKiran Chandramohan    integer :: arr2(10)
31*3323a4bdSKiran Chandramohan    integer, save :: arr3(10)
32*3323a4bdSKiran Chandramohan    common /blk2/ a2
33*3323a4bdSKiran Chandramohan    common /blk3/ a3
34*3323a4bdSKiran Chandramohan    save /blk3/
35*3323a4bdSKiran Chandramohan
36*3323a4bdSKiran Chandramohan    !ERROR: A variable that appears in a THREADPRIVATE directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly
37*3323a4bdSKiran Chandramohan    !$omp threadprivate(arr2)
38*3323a4bdSKiran Chandramohan
39*3323a4bdSKiran Chandramohan    !$omp threadprivate(arr3)
40*3323a4bdSKiran Chandramohan
41*3323a4bdSKiran Chandramohan    !$omp threadprivate(/blk2/)
42*3323a4bdSKiran Chandramohan
43*3323a4bdSKiran Chandramohan    !ERROR: A variable in a THREADPRIVATE directive cannot be an element of a common block
44*3323a4bdSKiran Chandramohan    !$omp threadprivate(a2)
45*3323a4bdSKiran Chandramohan
46*3323a4bdSKiran Chandramohan    !$omp threadprivate(/blk3/)
47*3323a4bdSKiran Chandramohan
48*3323a4bdSKiran Chandramohan    !ERROR: A variable in a THREADPRIVATE directive cannot be an element of a common block
49*3323a4bdSKiran Chandramohan    !$omp threadprivate(a3)
50*3323a4bdSKiran Chandramohan  end
51*3323a4bdSKiran Chandramohanend
52*3323a4bdSKiran Chandramohan
53*3323a4bdSKiran Chandramohanmodule mod4
54*3323a4bdSKiran Chandramohan  integer :: arr4(10)
55*3323a4bdSKiran Chandramohan  common /blk4/ a4
56*3323a4bdSKiran Chandramohan
57*3323a4bdSKiran Chandramohan  !$omp threadprivate(arr4)
58*3323a4bdSKiran Chandramohan
59*3323a4bdSKiran Chandramohan  !$omp threadprivate(/blk4/)
60*3323a4bdSKiran Chandramohan
61*3323a4bdSKiran Chandramohan  !$omp threadprivate(blk4)
62*3323a4bdSKiran Chandramohan
63*3323a4bdSKiran Chandramohan  !ERROR: A variable in a THREADPRIVATE directive cannot be an element of a common block
64*3323a4bdSKiran Chandramohan  !$omp threadprivate(a4)
65*3323a4bdSKiran Chandramohanend
66*3323a4bdSKiran Chandramohan
67*3323a4bdSKiran Chandramohansubroutine func5()
68*3323a4bdSKiran Chandramohan  integer :: arr5(10)
69*3323a4bdSKiran Chandramohan  common /blk5/ a5
70*3323a4bdSKiran Chandramohan
71*3323a4bdSKiran Chandramohan  !ERROR: A variable that appears in a THREADPRIVATE directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly
72*3323a4bdSKiran Chandramohan  !$omp threadprivate(arr5)
73*3323a4bdSKiran Chandramohan
74*3323a4bdSKiran Chandramohan  !$omp threadprivate(/blk5/)
75*3323a4bdSKiran Chandramohan
76*3323a4bdSKiran Chandramohan  !ERROR: A variable that appears in a THREADPRIVATE directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly
77*3323a4bdSKiran Chandramohan  !$omp threadprivate(blk5)
78*3323a4bdSKiran Chandramohan
79*3323a4bdSKiran Chandramohan  !ERROR: A variable in a THREADPRIVATE directive cannot be an element of a common block
80*3323a4bdSKiran Chandramohan  !$omp threadprivate(a5)
81*3323a4bdSKiran Chandramohanend
82