// PR c++/33894 // { dg-do run } // { dg-options "-O2" } extern "C" void abort (); int check; template void foo () { #pragma omp atomic check |= sizeof (T); } template void bar (T *x, T y) { #pragma omp atomic *x += y; } template void baz () { #pragma omp atomic check++; } int main () { int i = 0; long l = 0; check = 0; foo (); if (check != sizeof (char)) abort (); foo (); if (check != (sizeof (char) | sizeof (short))) abort (); bar(&i, 4); bar(&l, 8L); if (i != 4 || l != 8L) abort (); baz (); if (check != (sizeof (char) | sizeof (short)) + 1) abort (); baz (); if (check != (sizeof (char) | sizeof (short)) + 2) abort (); }