This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: copy/copy_backward/fill/fill_n/equal rework

On 09/09/19 20:34 +0200, François Dumont wrote:

    This patch improves stl_algobase.h copy/copy_backward/fill/fill_n/equal implementations. The improvements are:

- activation of algo specialization for __gnu_debug::_Safe_iterator (w/o _GLIBCXX_DEBUG mode)

- activation of algo specialization for _Deque_iterator even if mixed with another kind of iterator.

- activation of algo specializations __copy_move_a2 for something else than pointers. For example this code:

std::vector<char> v { 'a', 'b', .... };

ostreambuf_iterator out(std::cout);

std::copy(v.begin(), v.end(), out);

is not calling the specialization __copy_move_a2(const char*, const char*, ostreambuf_iterator<>);

It also fix a _GLIBCXX_DEBUG issue where the __niter_base specialization was wrongly removing the _Safe_iterator<> layer. The testsuite/25_algorithms/copy/debug/ test case was failing on a debug assertion because _after_ the copy we were trying to increment the vector iterator after past-the-end. Of course the problem is the _after_, Debug mode should detect this _before_ it takes place which it does now.

Note that std::fill_n is now making use of std::fill for some optimizations dealing with random access iterators.

Performances are very good:

This looks good, but I'm unable to apply the patch:

error: patch failed: libstdc++-v3/include/bits/deque.tcc:967
error: libstdc++-v3/include/bits/deque.tcc: patch does not apply
error: patch failed: libstdc++-v3/include/bits/stl_algobase.h:499
error: libstdc++-v3/include/bits/stl_algobase.h: patch does not apply

Could you regenerate the patch (against a clean master tree) and
resend? Thanks.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]