123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // PR c++/38348
- // { dg-do run }
- extern "C" void abort ();
- int cnt;
- template <typename T>
- void
- f0 (T, int)
- {
- abort ();
- }
- template <>
- void
- f0<int> (int, int type)
- {
- if (type != 0)
- abort ();
- #pragma omp atomic
- cnt++;
- }
- template <>
- void
- f0<const char *> (const char *, int type)
- {
- if (type != 1)
- abort ();
- #pragma omp atomic
- cnt++;
- }
- template <typename T>
- void
- f1 ()
- {
- #pragma omp parallel for
- for (int i = 0; i < 10; i++)
- f0 (i, 0);
- }
- template <typename T>
- void
- f2 ()
- {
- #pragma omp parallel for
- for (T i = T (0); i < T (10); i += T (1))
- f0 (i, 0);
- }
- void
- f3 ()
- {
- #pragma omp parallel for
- for (int i = 0; i < 10; i++)
- f0 (i, 0);
- }
- const char *p = "abcdefghij";
- template <typename T>
- void
- f4 ()
- {
- #pragma omp parallel for
- for (const char *i = p; i < p + 10; i += 1)
- f0 (i, 1);
- }
- template <typename T>
- void
- f5 ()
- {
- #pragma omp parallel for
- for (T i = T (p); i < T (p + 10); i += 1)
- f0 (i, 1);
- }
- void
- f6 ()
- {
- #pragma omp parallel for
- for (const char *i = p; i < p + 10; i++)
- f0 (i, 1);
- }
- int
- main ()
- {
- f1<int> ();
- if (cnt != 10)
- abort ();
- f2<int> ();
- if (cnt != 20)
- abort ();
- f3 ();
- if (cnt != 30)
- abort ();
- f4<int> ();
- if (cnt != 40)
- abort ();
- f5<const char *> ();
- if (cnt != 50)
- abort ();
- f6 ();
- if (cnt != 60)
- abort ();
- }
|