/* { dg-do run } */

extern
#ifdef __cplusplus
"C"
#endif
void abort (void);
float x = 6.0f;

int
main ()
{
  float v;
  int r;
  #pragma omp atomic compare
  x = x > 8.0f ? 8.0f : x;
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  #pragma omp atomic compare
  x = x > 4.0f ? 4.0f : x;
  #pragma omp atomic read
  v = x;
  if (v != 4.0f)
    abort ();
  #pragma omp atomic compare capture
  v = x = x < 8.0f ? 8.0f : x;
  if (v != 8.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 8)
    abort ();
  #pragma omp atomic capture compare
  { v = x; x = x < 12.0f ? 12.0f : x; }
  if (v != 8.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 12.0f)
    abort ();
  #pragma omp atomic capture compare
  { v = x; x = x < 4.0f ? 4.0f : x; }
  if (v != 12.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 12.0f)
    abort ();
  #pragma omp atomic compare
  x = x == 12.0 ? 16.0L : x;
  #pragma omp atomic read
  v = x;
  if (v != 16.0)
    abort ();
  r = 57;
  #pragma omp atomic compare capture
  v = x = x == 15.0f ? r + 7.0f : x;
  if (v != 16.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 16.0f)
    abort ();
  #pragma omp atomic capture, update, compare seq_cst fail(acquire)
  { v = x; x = x == 73.0L - r ? 12.0f : x; }
  if (v != 16.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 12.0f)
    abort ();
  #pragma omp atomic update, compare, capture
  { x = x == 69.0 - r ? 6.0f : x; v = x; }
  if (v != 6.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  #pragma omp atomic compare
  if (x > 8.0f) { x = 8.0f; }
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  #pragma omp atomic compare
  if (x > 4.0) { x = 4.0; }
  #pragma omp atomic read
  v = x;
  if (v != 4.0f)
    abort ();
  #pragma omp atomic compare capture
  { if (x < 8.0f) { x = 8.0f; } v = x; }
  if (v != 8.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 8.0f)
    abort ();
  #pragma omp atomic capture compare
  { v = x; if (x < 12.0f) { x = 12.0f; } }
  if (v != 8.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 12.0f)
    abort ();
  #pragma omp atomic capture compare
  { v = x; if (x < 4.0L) { x = 4.0L; } }
  if (v != 12.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 12.0f)
    abort ();
  #pragma omp atomic compare
  if (x == 12.0f) { x = 16.0L; }
  #pragma omp atomic read
  v = x;
  if (v != 16.0f)
    abort ();
  r = 57.0;
  #pragma omp atomic compare capture
  { if (x == 15.0f) { x = r + 7.0f; } v = x; }
  if (v != 16.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 16.0f)
    abort ();
  #pragma omp atomic capture, update, compare seq_cst fail(acquire)
  { v = x; if (x == 73.0L - r) { x = 12.0L; } }
  if (v != 16.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 12.0f)
    abort ();
  #pragma omp atomic update, compare, capture
  { if (x == 69.0L - r) { x = 6.0; } v = x; }
  if (v != 6.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  v = 24;
  #pragma omp atomic compare capture
  if (x == 12.0f) { x = 16.0f; } else { v = x; }
  if (v != 6.0f)
    abort ();
  v = 32.0f;
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  v = 147.0f;
  #pragma omp atomic capture compare
  if (x == 6.0f) { x = 57.0f; } else { v = x; }
  if (v != 147.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 57.0f)
    abort ();
  #pragma omp atomic update, capture, compare, weak, seq_cst, fail (relaxed)
  { r = x == 137.0f; if (r) { x = 174.0f; } }
  if (r)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 57.0f)
    abort ();
  #pragma omp atomic compare capture fail (relaxed)
  { r = x == 57.0f; if (r) { x = 6.0f; } }
  if (r != 1)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  v = -5.0f;
  #pragma omp atomic capture compare
  { r = x == 17.0L; if (r) { x = 25.0; } else { v = x; } }
  if (r || v != 6.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 6.0f)
    abort ();
  v = 15.0f;
  #pragma omp atomic capture compare
  { r = x == 6.0f; if (r) { x = 23.0f; } else { v = x; } }
  if (r != 1 || v != 15.0f)
    abort ();
  #pragma omp atomic read
  v = x;
  if (v != 23.0f)
    abort ();
  return 0;
}
