aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-02-25 18:06:46 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2025-02-25 22:34:16 +0000
commit2256e30874af2ef804bb19d2eba40f9c92953beb (patch)
tree29a3a68d0559588740cd99664964d2d42674365d
parent892ee5ffba0760794a932e36771863a86ef2b271 (diff)
downloadgcc-2256e30874af2ef804bb19d2eba40f9c92953beb.zip
gcc-2256e30874af2ef804bb19d2eba40f9c92953beb.tar.gz
gcc-2256e30874af2ef804bb19d2eba40f9c92953beb.tar.bz2
libstdc++: Fix typo in std::fill SFINAE constraint [PR93059]
The r15-4321-gd8ef4471cb9c9f change incorrectly used __value as the member of the __memcpyable_integer trait, but it should have been __width. That meant this overload was not being used for _Tp != _Up. Also return after doing the loop for the consteval case. The missing return wasn't causing incorrect behaviour because the consteval loop increments the iterator until it equals the end of the range, so the memset isn't done. But it's still better to return and not even try to do the memset. libstdc++-v3/ChangeLog: PR libstdc++/93059 * include/bits/stl_algobase.h (__fill_a1): Fix typo in SFINAE constraint.
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index be311b9..fc7cc89 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -943,7 +943,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
inline typename
__gnu_cxx::__enable_if<__is_byte<_Up>::__value
&& (__are_same<_Up, _Tp>::__value // for std::byte
- || __memcpyable_integer<_Tp>::__value),
+ || __memcpyable_integer<_Tp>::__width),
void>::__type
__fill_a1(_Up* __first, _Up* __last, const _Tp& __x)
{
@@ -955,6 +955,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
{
for (; __first != __last; ++__first)
*__first = __val;
+ return;
}
#endif
if (const size_t __len = __last - __first)