1! { dg-do compile }
2
3subroutine example_criticial ()
4  use omp_lib
5  implicit none
6  integer, parameter :: my_omp_hint = omp_sync_hint_contended
7  integer i, a, b
8
9  !$omp parallel do
10  do i = 1, 10
11      !$omp critical (HASH0) hint(my_omp_hint)  ! OK
12      a = a + i;
13      !$omp end critical (HASH0)
14  end do
15  !$omp parallel do
16  do i = 1, 10
17      !$omp critical (HASH1) hint(omp_sync_hint_none)  ! OK
18      a = a + i;
19      !$omp end critical (HASH1)
20  end do
21  !$omp parallel do
22  do i = 1, 10
23      !$omp critical (HASH2) hint(omp_sync_hint_uncontended)  ! OK
24      a = a + i;
25      !$omp end critical (HASH2)
26  end do
27  !$omp parallel do
28  do i = 1, 10
29      !$omp critical (HASH3) hint(omp_sync_hint_contended)  ! OK
30      a = a + i;
31      !$omp end critical (HASH3)
32  end do
33  !$omp parallel do
34  do i = 1, 10
35      !$omp critical (HASH4) hint(omp_sync_hint_speculative)  ! OK
36      a = a + i;
37      !$omp end critical (HASH4)
38  end do
39  !$omp parallel do
40  do i = 1, 10
41      !$omp critical (HASH5) hint(omp_sync_hint_nonspeculative)  ! OK
42      a = a + i;
43      !$omp end critical (HASH5)
44  end do
45  !$omp parallel do
46  do i = 1, 10
47      !$omp critical (HASH6) hint(omp_sync_hint_contended + omp_sync_hint_speculative)  ! OK
48      a = a + i;
49      !$omp end critical (HASH6)
50  end do
51
52  !$omp parallel do
53  do i = 1, 10
54      ! Accepted but invalid: different hint for same name.
55      !$omp critical (HASH6) hint(omp_sync_hint_contended + omp_sync_hint_speculative)  ! OK
56      a = a + i;
57      !$omp end critical (HASH6)
58  end do
59  !$omp parallel do
60  do i = 1, 10
61      ! Accepted but invalid: Some random integer expr.
62      !$omp critical (HASH) hint(1 + 2)
63      a = a + i;
64      !$omp end critical (HASH)
65  end do
66  !$omp parallel do
67  do i = 1, 10
68      !$omp critical (HASH) hint(-3)  ! { dg-error "shall be a valid constant hint expression" }
69      a = a + i;
70      !$omp end critical (HASH)
71  end do
72  !$omp parallel do
73  do i = 1, 10
74      !$omp critical (HASH2) hint(b)  ! { dg-error "shall be a valid constant hint expression" }
75      a = a + i;
76      !$omp end critical (HASH2)
77  end do
78  !$omp parallel do
79  do i = 1, 10
80      !$omp critical () hint(omp_hint_speculative)  ! { dg-error "Invalid character in name" }
81      a = a + i;
82!      !$omp end critical
83  end do
84  !$omp parallel do
85  do i = 1, 10
86      !$omp critical hint(omp_sync_hint_none)  ! OK
87      a = a + i;
88      !$omp end critical
89  end do
90  !$omp parallel do
91  do i = 1, 10
92      !$omp critical hint(omp_sync_hint_contended)  ! { dg-error "CRITICAL at .1. with HINT clause requires a NAME, except when omp_sync_hint_none is used" }
93      a = a + i;
94      !$omp end critical
95  end do
96end
97