As a corollary to PR 33486, here is a valid program that doesn't compile in parallel mode: ------------------ #include <algorithm> void f () { int *p, *q; std::random_shuffle (p, q); } ------------------ The reason is that random_shuffle internally calls a function that isn't found in the correct namespaces:
4.3.0/parallel/random_shuffle.h: In function 'void __gnu_parallel::sequential_random_shuffle(RandomAccessIterator, RandomAccessIterator, RandomNumberGenerator&) [with RandomAccessIterator = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]': 4.3.0/parallel/algo.h:1230: instantiated from 'void std::__parallel::random_shuffle(_RAIter, _RAIter, RandomNumberGenerator&) [with _RAIter = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/algo.h:1217: instantiated from 'void std::__parallel::random_shuffle(_RAIter, _RAIter) [with _RAIter = int*]' x.cc:4: instantiated from here 4.3.0/parallel/random_shuffle.h:471: error: 'partial_sum' was not declared in this scope 4.3.0/parallel/random_shuffle.h: In function 'void __gnu_parallel::parallel_random_shuffle_drs_pu(__gnu_parallel::DRSSorterPU<RandomAccessIterator, RandomNumberGenerator>*) [with RandomAccessIterator = int*, RandomNumberGenerator = __gnu_parallel::random_number]': 4.3.0/parallel/random_shuffle.h:380: instantiated from 'void __gnu_parallel::parallel_random_shuffle_drs(RandomAccessIterator, RandomAccessIterator, typename std::iterator_traits<_Iterator>::difference_type, int, RandomNumberGenerator&) [with RandomAccessIterator = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/random_shuffle.h:511: instantiated from 'void __gnu_parallel::parallel_random_shuffle(RandomAccessIterator, RandomAccessIterator, RandomNumberGenerator) [with RandomAccessIterator = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/algo.h:1228: instantiated from 'void std::__parallel::random_shuffle(_RAIter, _RAIter, RandomNumberGenerator&) [with _RAIter = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/algo.h:1217: instantiated from 'void std::__parallel::random_shuffle(_RAIter, _RAIter) [with _RAIter = int*]' x.cc:4: instantiated from here 4.3.0/parallel/random_shuffle.h:187: error: 'partial_sum' was not declared in this scope 4.3.0/parallel/random_shuffle.h: In function 'void __gnu_parallel::sequential_random_shuffle(RandomAccessIterator, RandomAccessIterator, RandomNumberGenerator&) [with RandomAccessIterator = int*, RandomNumberGenerator = __gnu_parallel::random_number]': 4.3.0/parallel/random_shuffle.h:252: instantiated from 'void __gnu_parallel::parallel_random_shuffle_drs_pu(__gnu_parallel::DRSSorterPU<RandomAccessIterator, RandomNumberGenerator>*) [with RandomAccessIterator = int*, RandomNumberGenerator = __gnu_parallel::random_number]' 4.3.0/parallel/random_shuffle.h:380: instantiated from 'void __gnu_parallel::parallel_random_shuffle_drs(RandomAccessIterator, RandomAccessIterator, typename std::iterator_traits<_Iterator>::difference_type, int, RandomNumberGenerator&) [with RandomAccessIterator = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/random_shuffle.h:511: instantiated from 'void __gnu_parallel::parallel_random_shuffle(RandomAccessIterator, RandomAccessIterator, RandomNumberGenerator) [with RandomAccessIterator = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/algo.h:1228: instantiated from 'void std::__parallel::random_shuffle(_RAIter, _RAIter, RandomNumberGenerator&) [with _RAIter = int*, RandomNumberGenerator = std::__parallel::c_rand_number<int>]' 4.3.0/parallel/algo.h:1217: instantiated from 'void std::__parallel::random_shuffle(_RAIter, _RAIter) [with _RAIter = int*]' x.cc:4: instantiated from here 4.3.0/parallel/random_shuffle.h:471: error: 'partial_sum' was not declared in this scope -- Summary: parallel v3: more functions not in right namespace Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bangerth at dealii dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33487