1 // PR c++/33894 2 // { dg-do run } 3 4 extern "C" void abort (); 5 6 int check; 7 8 template<typename T> void foo()9foo () 10 { 11 #pragma omp atomic 12 check |= sizeof (T); 13 } 14 15 template<typename T> void bar(T * x,T y)16bar (T *x, T y) 17 { 18 #pragma omp atomic 19 *x += y; 20 } 21 22 template<typename T> void baz()23baz () 24 { 25 #pragma omp atomic 26 check++; 27 } 28 29 int main()30main () 31 { 32 int i = 0; 33 long l = 0; 34 35 check = 0; 36 foo<char> (); 37 if (check != sizeof (char)) 38 abort (); 39 foo<short> (); 40 if (check != (sizeof (char) | sizeof (short))) 41 abort (); 42 bar(&i, 4); 43 bar(&l, 8L); 44 if (i != 4 || l != 8L) 45 abort (); 46 baz<char> (); 47 if (check != (sizeof (char) | sizeof (short)) + 1) 48 abort (); 49 baz<long double> (); 50 if (check != (sizeof (char) | sizeof (short)) + 2) 51 abort (); 52 } 53