2012-12-20 Paul Thomas <pault@gcc.gnu.org>
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / for-6.C
blob0da21ce2fe5bf22f88b265a7ad0288da799d98d2
1 // PR c++/38348
2 // { dg-do run }
4 extern "C" void abort ();
5 int cnt;
7 template <typename T>
8 void
9 f0 (T, int)
11   abort ();
14 template <>
15 void
16 f0<int> (int, int type)
18   if (type != 0)
19     abort ();
20 #pragma omp atomic
21   cnt++;
24 template <>
25 void
26 f0<const char *> (const char *, int type)
28   if (type != 1)
29     abort ();
30 #pragma omp atomic
31   cnt++;
34 template <typename T>
35 void
36 f1 ()
38 #pragma omp parallel for
39   for (int i = 0; i < 10; i++)
40     f0 (i, 0);
43 template <typename T>
44 void
45 f2 ()
47 #pragma omp parallel for
48   for (T i = T (0); i < T (10); i += T (1))
49     f0 (i, 0);
52 void
53 f3 ()
55 #pragma omp parallel for
56   for (int i = 0; i < 10; i++)
57     f0 (i, 0);
60 const char *p = "abcdefghij";
62 template <typename T>
63 void
64 f4 ()
66 #pragma omp parallel for
67   for (const char *i = p; i < p + 10; i += 1)
68     f0 (i, 1);
71 template <typename T>
72 void
73 f5 ()
75 #pragma omp parallel for
76   for (T i = T (p); i < T (p + 10); i += 1)
77     f0 (i, 1);
80 void
81 f6 ()
83 #pragma omp parallel for
84   for (const char *i = p; i < p + 10; i++)
85     f0 (i, 1);
88 int
89 main ()
91   f1<int> ();
92   if (cnt != 10)
93     abort ();
94   f2<int> ();
95   if (cnt != 20)
96     abort ();
97   f3 ();
98   if (cnt != 30)
99     abort ();
100   f4<int> ();
101   if (cnt != 40)
102     abort ();
103   f5<const char *> ();
104   if (cnt != 50)
105     abort ();
106   f6 ();
107   if (cnt != 60)
108     abort ();