xref: /llvm-project/flang/test/Semantics/OpenACC/acc-set-validity.f90 (revision f706837e2b85c7e5f29b118d0ecac41ba23e226f)
1! RUN: %python %S/../test_errors.py %s %flang -fopenacc
2
3! Check OpenACC clause validity for the following construct and directive:
4!   2.14.3 Set
5
6program openacc_clause_validity
7
8  implicit none
9
10  integer :: i, j
11  integer, parameter :: N = 256
12  real(8), dimension(N) :: a
13
14  !$acc parallel
15  !ERROR: Directive SET may not be called within a compute region
16  !$acc set default_async(i)
17  !$acc end parallel
18
19  !$acc serial
20  !ERROR: Directive SET may not be called within a compute region
21  !$acc set default_async(i)
22  !$acc end serial
23
24  !$acc kernels
25  !ERROR: Directive SET may not be called within a compute region
26  !$acc set default_async(i)
27  !$acc end kernels
28
29  !$acc parallel
30  !$acc loop
31  do i = 1, N
32    !ERROR: Directive SET may not be called within a compute region
33    !$acc set default_async(i)
34    a(i) = 3.14
35  end do
36  !$acc end parallel
37
38  !$acc serial
39  !$acc loop
40  do i = 1, N
41    !ERROR: Directive SET may not be called within a compute region
42    !$acc set default_async(i)
43    a(i) = 3.14
44  end do
45  !$acc end serial
46
47  !$acc kernels
48  !$acc loop
49  do i = 1, N
50    !ERROR: Directive SET may not be called within a compute region
51    !$acc set default_async(i)
52    a(i) = 3.14
53  end do
54  !$acc end kernels
55
56  !$acc parallel loop
57  do i = 1, N
58    !ERROR: Directive SET may not be called within a compute region
59    !$acc set default_async(i)
60    a(i) = 3.14
61  end do
62
63  !$acc serial loop
64  do i = 1, N
65    !ERROR: Directive SET may not be called within a compute region
66    !$acc set default_async(i)
67    a(i) = 3.14
68  end do
69
70  !$acc kernels loop
71  do i = 1, N
72    !ERROR: Directive SET may not be called within a compute region
73    !$acc set default_async(i)
74    a(i) = 3.14
75  end do
76
77  !ERROR: At least one of DEFAULT_ASYNC, DEVICE_NUM, DEVICE_TYPE clause must appear on the SET directive
78  !$acc set
79
80  !ERROR: At least one of DEFAULT_ASYNC, DEVICE_NUM, DEVICE_TYPE clause must appear on the SET directive
81  !$acc set if(.TRUE.)
82
83  !ERROR: At most one DEFAULT_ASYNC clause can appear on the SET directive
84  !$acc set default_async(2) default_async(1)
85
86  !ERROR: At most one DEFAULT_ASYNC clause can appear on the SET directive
87  !$acc set default_async(2) default_async(1)
88
89  !ERROR: At most one DEVICE_NUM clause can appear on the SET directive
90  !$acc set device_num(1) device_num(i)
91
92  !ERROR: At most one DEVICE_TYPE clause can appear on the SET directive
93  !$acc set device_type(*) device_type(nvidia)
94
95  !$acc set default_async(2)
96  !$acc set default_async(i)
97  !$acc set device_num(1)
98  !$acc set device_num(i)
99  !$acc set device_type(default)
100  !$acc set device_num(1) default_async(2) device_type(*)
101
102  !ERROR: The DEVICE_TYPE clause on the SET directive accepts only one value
103  !$acc set device_type(*, default)
104
105  !ERROR: At least one of DEFAULT_ASYNC, DEVICE_NUM, DEVICE_TYPE clause must appear on the SET directive
106  !$acc set
107
108end program openacc_clause_validity
109