This is the mail archive of the gcc-patches@gcc.gnu.org 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]

[patch] fix libstdc++/58982


This ensures we do not optimize a std::copy() of trivial types to
memmove() if the unoptimized form would be ill-formed because the type
isn't assignable, and similarly does not optimize
std::uninitialized_xxx() on trivial types to simple assignment when
the type isn't assignable.  This fixes the regression with
std::vector<std::atomic<int>> v(1).

2013-11-09  Jonathan Wakely  <jwakely.gcc@gmail.com>

        PR libstdc++/58982
        * include/bits/stl_algobase.h (__copy_move::__copy_m): Use assertion
        to prevent using memmove() on non-assignable types.
        (__copy_move_backward::__copy_move_b): Likewise.
        * include/bits/stl_uninitialized.h (uninitialized_copy
        uninitialized_copy_n, uninitialized_fill, uninitialized_fill_n,
        __uninitialized_default, __uninitialized_default_n): Check for
        assignable as well as trivial.
        * testsuite/20_util/specialized_algorithms/uninitialized_copy/
        58982.cc: New.
        * testsuite/20_util/specialized_algorithms/uninitialized_copy_n/
        58982.cc: New.
        * testsuite/20_util/specialized_algorithms/uninitialized_fill/
        58982.cc: New.
        * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/
        58982.cc: New.
        * testsuite/25_algorithms/copy/58982.cc: New.
        * testsuite/25_algorithms/copy_n/58982.cc: New.

Tested x86_64-linux, committed to trunk.

Attachment: patch.txt
Description: Text document


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