https://gcc.gnu.org/g:2256e30874af2ef804bb19d2eba40f9c92953beb

commit r15-7706-g2256e30874af2ef804bb19d2eba40f9c92953beb
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Feb 25 18:06:46 2025 +0000

    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.

Diff:
---
 libstdc++-v3/include/bits/stl_algobase.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libstdc++-v3/include/bits/stl_algobase.h 
b/libstdc++-v3/include/bits/stl_algobase.h
index be311b91f53a..fc7cc89736a8 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)

Reply via email to