12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // { dg-do run }
- extern "C" void abort (void);
- template <typename T>
- void
- foo ()
- {
- extern T v, x1, x2, x3, x4, x5, x6;
- #pragma omp atomic capture
- v = ++x1;
- if (!v)
- abort ();
- #pragma omp atomic capture
- v = x2++;
- if (v)
- abort ();
- #pragma omp atomic read
- v = x3;
- if (!v)
- abort ();
- #pragma omp atomic read
- v = x4;
- if (!v)
- abort ();
- #pragma omp atomic capture
- { v = x5; x5 |= 1; }
- if (v)
- abort ();
- #pragma omp atomic capture
- { x6 |= 1; v = x6; }
- if (!v)
- abort ();
- }
- template <typename T>
- void
- bar ()
- {
- extern T v, x1, x2;
- #pragma omp atomic write
- x1 = false;
- #pragma omp atomic write
- x2 = false;
- #pragma omp atomic capture
- { ++x1; v = x1; }
- if (!v)
- abort ();
- #pragma omp atomic capture
- { v = x2; x2++; }
- if (v)
- abort ();
- #pragma omp atomic write
- x1 = false;
- #pragma omp atomic write
- x2 = false;
- #pragma omp atomic capture
- { x1++; v = x1; }
- if (!v)
- abort ();
- #pragma omp atomic capture
- { v = x2; ++x2; }
- if (v)
- abort ();
- }
- bool v, x1, x2, x3, x4, x5, x6;
- int
- main ()
- {
- #pragma omp atomic write
- x3 = true;
- #pragma omp atomic write
- x4 = true;
- foo <bool> ();
- bar <bool> ();
- return 0;
- }
|