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