https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118035

--- Comment #11 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Jonathan Wakely
<r...@gcc.gnu.org>:

https://gcc.gnu.org/g:d14333852ebd77b898b3bf1030f9bf5152497345

commit r12-11054-gd14333852ebd77b898b3bf1030f9bf5152497345
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Mon Dec 16 17:42:24 2024 +0000

    libstdc++: Fix std::deque::insert(pos, first, last) undefined behaviour
[PR118035]

    Inserting an empty range into a std::deque results in undefined calls to
    either std::copy, std::copy_backward, std::move, or std::move_backward.
    We call those algos with invalid arguments where the output range is the
    same as the input range, e.g.  std::copy(first, last, first) which
    violates the preconditions for the algorithms.

    This fix simply returns early if there's nothing to insert. Most callers
    already ensure that we don't even call _M_range_insert_aux with an empty
    range, but some callers don't. Rather than checking for n == 0 in each
    of the callers, this just does the check once and uses __builtin_expect
    to treat empty insertions as unlikely.

    libstdc++-v3/ChangeLog:

            PR libstdc++/118035
            * include/bits/deque.tcc (_M_range_insert_aux): Return
            immediately if inserting an empty range.
            * testsuite/23_containers/deque/modifiers/insert/118035.cc: New
            test.

    (cherry picked from commit b273e25e11c842a5729d0e03c85088cf5ba8e06c)
  • [Bug libstdc++/118035] [12 Regr... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to