https://gcc.gnu.org/g:c612c500de3804b330090fe478b5e055944ff8b2
commit r15-9915-gc612c500de3804b330090fe478b5e055944ff8b2 Author: Jonathan Wakely <jwak...@redhat.com> Date: Wed Jul 2 21:54:06 2025 +0100 libstdc++: Fix regression in std::uninitialized_fill for C++98 [PR120931] A typo in r15-4473-g3abe751ea86e34 made it ill-formed to use std::uninitialized_fill with iterators that aren't pointers (or pointers wrapped in our __normal_iterator) if the value type is a narrow character type. libstdc++-v3/ChangeLog: PR libstdc++/120931 * include/bits/stl_uninitialized.h (__uninitialized_fill<true>): Fix typo resulting in call to __do_uninit_copy instead of __do_uninit_fill. * testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc: New test. (cherry picked from commit bc3ec8684f7111a06fde433bbe57caa385b178af) Diff: --- libstdc++-v3/include/bits/stl_uninitialized.h | 2 +- .../specialized_algorithms/uninitialized_fill/120931.cc | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h index b1428db48b00..eed924ded0a0 100644 --- a/libstdc++-v3/include/bits/stl_uninitialized.h +++ b/libstdc++-v3/include/bits/stl_uninitialized.h @@ -357,7 +357,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::__niter_base(__last), __x); else - std::__do_uninit_copy(__first, __last, __x); + std::__do_uninit_fill(__first, __last, __x); } // Overload for pointers. diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc new file mode 100644 index 000000000000..766fac0e527b --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc @@ -0,0 +1,16 @@ +// { dg-options "-std=gnu++98" } +// { dg-do compile { target c++98_only } } +// std::deque<character types>::resize() method fails with -std=c++98 + +#include <memory> +#include <testsuite_iterators.h> + +void +test_pr120931() +{ + using __gnu_test::test_container; + using __gnu_test::forward_iterator_wrapper; + unsigned char c[1]; + test_container<unsigned char, forward_iterator_wrapper> f(c); + std::uninitialized_fill(f.begin(), f.end(), 0); +}