|  | /* { dg-do compile } */ | 
|  |  | 
|  | #include <omp.h> | 
|  |  | 
|  | void | 
|  | example_criticial () | 
|  | { | 
|  | int a, b; | 
|  | #pragma omp parallel for | 
|  | for (int i = 0; i < 10; ++i) | 
|  | { | 
|  | #pragma omp critical hint(omp_sync_hint_none)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH) hint(omp_sync_hint_none)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH2) hint(omp_sync_hint_uncontended)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH3) hint(omp_sync_hint_contended)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH4) hint(omp_sync_hint_speculative)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH5) hint(omp_sync_hint_nonspeculative)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH6) hint(omp_sync_hint_contended + omp_sync_hint_speculative)  /* OK */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH6) hint(omp_sync_hint_contended | omp_sync_hint_speculative)  /* OK */ | 
|  | a += i; | 
|  |  | 
|  | /* Accepted but invalid: different hint for same name. */ | 
|  | #pragma omp critical (HASH6) hint(omp_sync_hint_uncontended + omp_sync_hint_speculative) | 
|  | a += i; | 
|  | /* Accepted but invalid: Some random integer expr. */ | 
|  | #pragma omp critical (HASH) hint(omp_sync_hint_speculative + 1 + 2) | 
|  | a += i; | 
|  |  | 
|  | #pragma omp critical (HASH) hint(-3)  /* { dg-error "expected constant integer expression" } */ | 
|  | a += i; | 
|  | #pragma omp critical (HASH2) hint(b)  /* { dg-error "constant integer expression" } */ | 
|  | a += i; | 
|  | /* | 
|  | Fails with gcc as 'expected identifier' and | 
|  | with g++ as "clause requires a name, except when 'omp_sync_hint_none'" | 
|  | #pragma omp critical () hint(omp_sync_hint_speculative) | 
|  | a += i; | 
|  | */ | 
|  | #pragma omp critical hint(omp_sync_hint_speculative)  /* { dg-error "with 'hint' clause requires a name, except when 'omp_sync_hint_none' is used" } */ | 
|  | a += i; | 
|  | } | 
|  | } |