[Bug libstdc++/118035] [12/13/14/15 Regression] deque<string> bug when inserting an empty iterator interval
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Dec 17 18:55:22 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118035
--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <redi@gcc.gnu.org>:
https://gcc.gnu.org/g:b273e25e11c842a5729d0e03c85088cf5ba8e06c
commit r15-6311-gb273e25e11c842a5729d0e03c85088cf5ba8e06c
Author: Jonathan Wakely <jwakely@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.
More information about the Gcc-bugs
mailing list