1// { dg-do run }
2
3extern "C" void abort (void);
4
5template <typename I, typename F>
6void
7foo ()
8{
9  I j = -10000;
10  F f = 1024.0;
11  int i;
12  #pragma omp parallel for reduction (min:f) reduction (max:j)
13    for (i = 0; i < 4; i++)
14      switch (i)
15	{
16	case 0:
17	  if (j < -16) j = -16; break;
18	case 1:
19	  if (f > -2.0) f = -2.0; break;
20	case 2:
21	  if (j < 8) j = 8; if (f > 9.0) f = 9.0; break;
22	case 3:
23	  break;
24	}
25  if (j != 8 || f != -2.0)
26    abort ();
27}
28
29int
30main ()
31{
32  int j = -10000;
33  float f = 1024.0;
34  int i;
35  #pragma omp parallel for reduction (min:f) reduction (max:j)
36    for (i = 0; i < 4; i++)
37      switch (i)
38	{
39	case 0:
40	  if (j < -16) j = -16; break;
41	case 1:
42	  if (f > -2.0) f = -2.0; break;
43	case 2:
44	  if (j < 8) j = 8; if (f > 9.0) f = 9.0; break;
45	case 3:
46	  break;
47	}
48  if (j != 8 || f != -2.0)
49    abort ();
50  foo <int, float> ();
51  foo <long, double> ();
52  foo <long long, long double> ();
53  return 0;
54}
55