https://gcc.gnu.org/g:955202eb2cdbe2bc74c626bce90ee1eac410ad4f

commit r14-10272-g955202eb2cdbe2bc74c626bce90ee1eac410ad4f
Author: François Dumont <frs.dum...@gmail.com>
Date:   Sat Jun 1 22:17:19 2024 +0200

    libstdc++: Fix -Wstringop-overflow warning coming from std::vector 
[PR109849]
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/109849
            * include/bits/vector.tcc
            (std::vector<>::_M_range_insert(iterator, _FwdIt, _FwdIt,
            forward_iterator_tag))[__cplusplus < 201103L]: Add 
__builtin_unreachable
            expression to tell the compiler that the allocated buffer is large 
enough to
            receive current elements plus the elements of the range to insert.
    
    (cherry picked from commit 0426be454448f8cfb9db21f4f669426afb7b57c8)

Diff:
---
 libstdc++-v3/include/bits/vector.tcc | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libstdc++-v3/include/bits/vector.tcc 
b/libstdc++-v3/include/bits/vector.tcc
index 25df060beee..42352aa63ca 100644
--- a/libstdc++-v3/include/bits/vector.tcc
+++ b/libstdc++-v3/include/bits/vector.tcc
@@ -1005,6 +1005,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
                const size_type __len =
                  _M_check_len(__n, "vector::_M_range_insert");
+#if __cplusplus < 201103LL
+               if (__len < (__n + (__old_start - __old_finish)))
+                 __builtin_unreachable();
+#endif
+
                pointer __new_start(this->_M_allocate(__len));
                pointer __new_finish(__new_start);
                __try

Reply via email to