Looks good, thanks.
On Mon, Oct 5, 2026 at 1:37 PM Jonathan Wakely <[email protected]> wrote: > The stack buffer used for the istream extraction operator does not need > to be zero-filled before we write to it. To prevent that zeroing from > happening automatically in C++26 we can use the [[indeterminate]] > attribute. For C++98 compatibility, __attribute__((uninitialized)) needs > to be used instead. > > Also define a new variable for the array length which is never zero. > This avoids a -Walloc-size warning in C++98 where the new-expression is > not a discarded statement so the compiler sees `new _CharT[0]`: > > include/bitset:1717: warning: allocation of insufficient size '0' for type > 'char' with size '1' [-Walloc-size] > > libstdc++-v3/ChangeLog: > > * include/std/bitset (operator>>): Define __array_len to ensure > that the array size is never zero. Add uninitialized attribute > to __buf. > --- > > Tested x86_64-linux. > > libstdc++-v3/include/std/bitset | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/libstdc++-v3/include/std/bitset > b/libstdc++-v3/include/std/bitset > index 469c8da9ece4..339f0c46cb5c 100644 > --- a/libstdc++-v3/include/std/bitset > +++ b/libstdc++-v3/include/std/bitset > @@ -1706,6 +1706,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER > typedef typename __istream_type::ios_base __ios_base; > > static const bool __use_local = _Nb * sizeof(_CharT) <= 256; + static const size_t __array_len = _Nb != 0 ? _Nb : 1; > > struct _Buffer > { > @@ -1714,7 +1715,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER > _Buffer() : _M_ptr(_M_local) > { > if _GLIBCXX_CONSTEXPR (!__use_local) - _M_ptr = new _CharT[_Nb]; > + _M_ptr = new _CharT[__array_len]; > } > > ~_Buffer() > @@ -1725,8 +1726,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER > #pragma GCC diagnostic pop > > _CharT* _M_ptr; > - _CharT _M_local[__use_local && _Nb != 0 ? _Nb : 1]; > - } __buf; > + _CharT _M_local[__use_local ? __array_len : 1]; > + }; > + _Buffer __buf __attribute__((__uninitialized__)); > > _CharT* __ptr = __buf._M_ptr; > > -- > 2.55.0 > >
