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()9 foo ()
10 {
11   #pragma omp atomic
12   check |= sizeof (T);
13 }
14 
15 template<typename T> void
bar(T * x,T y)16 bar (T *x, T y)
17 {
18   #pragma omp atomic
19   *x += y;
20 }
21 
22 template<typename T> void
baz()23 baz ()
24 {
25   #pragma omp atomic
26   check++;
27 }
28 
29 int
main()30 main ()
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