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