/* { dg-do compile } */ /* Tests iterators are allowed in ordered loops and that we keep track of the original iterator DECL for diagnostic purposes. */ #include #include /* Test plain iterator. */ void foo1 () { std::vector v; for (int i=1; i<=5; i++) v.push_back(i); std::vector::const_iterator it; #pragma omp parallel for ordered(1) for (it = v.begin(); it < v.end(); ++it) { #pragma omp ordered depend(sink:it-1) std::cout << *it << '\n'; #pragma omp ordered depend(source) } } /* Test non-dependent iterator in a template. */ template void foo2 () { std::vector v; for (int i=1; i<=5; i++) v.push_back(i); std::vector::const_iterator it; #pragma omp parallel for ordered(1) for (it = v.begin(); it < v.end(); ++it) { #pragma omp ordered depend(sink:it-1) std::cout << *it << '\n'; #pragma omp ordered depend(source) } } /* Test dependent iterator in a template. */ template void foo3 () { std::vector v; for (int i=1; i<=5; i++) v.push_back(i); typename std::vector::const_iterator it; #pragma omp parallel for ordered(1) for (it = v.begin(); it < v.end(); ++it) { #pragma omp ordered depend(sink:it-1) std::cout << *it << '\n'; #pragma omp ordered depend(source) } } int main () { foo2 <0> (); foo3 (); }