aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/gomp/atomic-25.c
blob: 653ef187fc86319d987ec8da6ba9f185636e0642 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* { dg-do compile } */

int x, r, z;
double d, v;
long double ld;

void
foo (int y, double e, long double f)
{
  #pragma omp atomic compare update seq_cst
  x = x > y ? y : x;
  #pragma omp atomic compare relaxed
  d = e > d ? e : d;
  #pragma omp atomic compare
  d = f < d ? f : d;
  #pragma omp atomic compare seq_cst fail(relaxed)
  x = 12U < x ? 12U : x;
  #pragma omp atomic compare
  x = x == 7 ? 24 : x;
  #pragma omp atomic compare
  x = x == 123UL ? 256LL : x;
  #pragma omp atomic compare
  ld = ld == f ? f + 5.0L : ld;
  #pragma omp atomic compare
  if (x == 9) { x = 5; }
  #pragma omp atomic compare
  if (x > 5) { x = 5; }
  #pragma omp atomic compare
  if (7 > x) { x = 7; }
  #pragma omp atomic compare update capture seq_cst fail(acquire)
  v = d = f > d ? f : d;
  #pragma omp atomic update capture compare
  v = x = x < 24ULL ? 24ULL : x;
  #pragma omp atomic compare, capture, update
  v = x = x == e ? f : x;
  #pragma omp atomic capture compare
  { v = d; if (d > e) { d = e; } }
  #pragma omp atomic compare capture
  { if (e < d) { d = e; } v = d; }
  #pragma omp atomic compare capture
  { y = x; if (x == 42) { x = 7; } }
  #pragma omp atomic capture compare weak
  { if (x == 42) { x = 7; } y = x; }
  #pragma omp atomic capture compare fail(seq_cst)
  if (d == 8.0) { d = 16.0; } else { v = d; }
  #pragma omp atomic capture compare
  { r = x == 8; if (r) { x = 24; } }
  #pragma omp atomic compare capture
  { r = x == y; if (r) { x = y + 6; } else { z = x; } }
}