123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- /* { dg-do run } */
- extern
- #ifdef __cplusplus
- "C"
- #endif
- void abort (void);
- int x = 6;
- int w, y;
- int *
- foo (void)
- {
- if (w)
- abort ();
- return &y;
- }
- int
- main ()
- {
- int v, r;
- #pragma omp atomic compare
- x = x > 8 ? 8 : x;
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- #pragma omp atomic compare
- x = x > 4 ? 4 : x;
- #pragma omp atomic read
- v = x;
- if (v != 4)
- abort ();
- #pragma omp atomic compare capture
- v = x = x < 8 ? 8 : x;
- if (v != 8)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 8)
- abort ();
- #pragma omp atomic capture compare
- { v = x; x = x < 12 ? 12 : x; }
- if (v != 8)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic capture compare
- { v = x; x = x < 4 ? 4 : x; }
- if (v != 12)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic write
- x = -32;
- #pragma omp atomic capture compare seq_cst fail(relaxed)
- { x = 12U < x ? 12U : x; v = x; }
- if (v != 12)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic compare
- x = x == 12 ? 16 : x;
- #pragma omp atomic read
- v = x;
- if (v != 16)
- abort ();
- r = 57;
- #pragma omp atomic compare capture
- v = x = x == 15 ? r + 7 : x;
- if (v != 16)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 16)
- abort ();
- #pragma omp atomic capture, update, compare seq_cst fail(acquire)
- { v = x; x = x == 73ULL - r ? 12LL : x; }
- if (v != 16)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic update, compare, capture
- { x = x == 69LL - r ? (unsigned char) 6 : x; v = x; }
- if (v != 6)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- #pragma omp atomic compare
- if (x > 8) { x = 8; }
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- #pragma omp atomic compare
- if (x > 4) { x = 4; }
- #pragma omp atomic read
- v = x;
- if (v != 4)
- abort ();
- #pragma omp atomic compare capture
- { if (x < 8) { x = 8; } v = x; }
- if (v != 8)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 8)
- abort ();
- #pragma omp atomic capture compare
- { v = x; if (x < 12) { x = 12; } }
- if (v != 8)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic capture compare
- { v = x; if (x < 4) { x = 4; } }
- if (v != 12)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic write
- x = -32;
- #pragma omp atomic capture compare seq_cst fail(relaxed)
- { if (12U < x) { x = 12U; } v = x; }
- if (v != 12)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic compare
- if (x == 12) { x = 16; }
- #pragma omp atomic read
- v = x;
- if (v != 16)
- abort ();
- r = 57;
- #pragma omp atomic compare capture
- { if (x == 15) { x = r + 7; } v = x; }
- if (v != 16)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 16)
- abort ();
- #pragma omp atomic capture, update, compare seq_cst fail(acquire)
- { v = x; if (x == 73ULL - r) { x = 12LL; } }
- if (v != 16)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 12)
- abort ();
- #pragma omp atomic update, compare, capture
- { if (x == 69LL - r) { x = (unsigned char) 6; } v = x; }
- if (v != 6)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- v = 24;
- #pragma omp atomic compare capture
- if (x == 12) { x = 16; } else { v = x; }
- if (v != 6)
- abort ();
- v = 32;
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- v = 147;
- #pragma omp atomic capture compare
- if (x == 6) { x = 57; } else { v = x; }
- if (v != 147)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 57)
- abort ();
- #pragma omp atomic update, capture, compare, weak, seq_cst, fail (relaxed)
- { r = x == 137; if (r) { x = 174; } }
- if (r)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 57)
- abort ();
- #pragma omp atomic compare capture fail (relaxed)
- { r = x == 57; if (r) { x = 6; } }
- if (r != 1)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- v = -5;
- #pragma omp atomic capture compare
- { r = x == 17; if (r) { x = 25; } else { v = x; } }
- if (r || v != 6)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 6)
- abort ();
- v = 15;
- #pragma omp atomic capture compare
- { r = x == 6; if (r) { x = 23; } else { v = x; } }
- if (r != 1 || v != 15)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 23)
- abort ();
- w = 1;
- #pragma omp atomic compare capture
- if (x == 23) { x = 57; } else { foo ()[0] = x; }
- #pragma omp atomic read
- v = x;
- if (v != 57)
- abort ();
- #pragma omp atomic capture update compare
- { r = x == 57; if (r) { x = 23; } else { foo ()[0] = x; } }
- if (r != 1)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 23)
- abort ();
- w = 0;
- #pragma omp atomic compare capture
- if (x == 24) { x = 57; } else { foo ()[0] = x; }
- if (y != 23)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 23)
- abort ();
- y = -5;
- #pragma omp atomic capture update compare
- {
- r = x == 57;
- if (r)
- {
- x = 27;
- }
- else
- {
- foo ()[0] = x;
- }
- }
- if (r || y != 23)
- abort ();
- #pragma omp atomic read
- v = x;
- if (v != 23)
- abort ();
- return 0;
- }
|