OSDN Git Service

fix broken checkin, test should be link not assemble
[pf3gnuchains/gcc-fork.git] / libgomp / testsuite / libgomp.c++ / for-6.C
1 // PR c++/38348
2 // { dg-do run }
3
4 extern "C" void abort ();
5 int cnt;
6
7 template <typename T>
8 void
9 f0 (T, int)
10 {
11   abort ();
12 }
13
14 template <>
15 void
16 f0<int> (int, int type)
17 {
18   if (type != 0)
19     abort ();
20 #pragma omp atomic
21   cnt++;
22 }
23
24 template <>
25 void
26 f0<const char *> (const char *, int type)
27 {
28   if (type != 1)
29     abort ();
30 #pragma omp atomic
31   cnt++;
32 }
33
34 template <typename T>
35 void
36 f1 ()
37 {
38 #pragma omp parallel for
39   for (int i = 0; i < 10; i++)
40     f0 (i, 0);
41 }
42
43 template <typename T>
44 void
45 f2 ()
46 {
47 #pragma omp parallel for
48   for (T i = T (0); i < T (10); i += T (1))
49     f0 (i, 0);
50 }
51
52 void
53 f3 ()
54 {
55 #pragma omp parallel for
56   for (int i = 0; i < 10; i++)
57     f0 (i, 0);
58 }
59
60 const char *p = "abcdefghij";
61
62 template <typename T>
63 void
64 f4 ()
65 {
66 #pragma omp parallel for
67   for (const char *i = p; i < p + 10; i += 1)
68     f0 (i, 1);
69 }
70
71 template <typename T>
72 void
73 f5 ()
74 {
75 #pragma omp parallel for
76   for (T i = T (p); i < T (p + 10); i += 1)
77     f0 (i, 1);
78 }
79
80 void
81 f6 ()
82 {
83 #pragma omp parallel for
84   for (const char *i = p; i < p + 10; i++)
85     f0 (i, 1);
86 }
87
88 int
89 main ()
90 {
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 ();
109 }