1 // { dg-do run }
2 
3 extern "C" void abort (void);
4 
5 template <typename I, typename F>
6 void
foo()7 foo ()
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 
29 int
main()30 main ()
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