mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
libstdc++: Fix -Wshift-count-overflow warning in std::bitset
This shift only happens if the unsigned long long type is wider than unsigned long but the compiler warns when it sees the shift, without caring if it's reachable. Use the preprocessor to compare the sizes and just reuse _M_to_ulong() if sizeof(long) == sizeof(long long). libstdc++-v3/ChangeLog: * include/std/bitset (_Base_bitset::_M_do_to_ullong): Avoid -Wshift-count-overflow warning.
This commit is contained in:
@@ -320,17 +320,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
_GLIBCXX14_CONSTEXPR unsigned long long
|
||||
_Base_bitset<_Nw>::_M_do_to_ullong() const
|
||||
{
|
||||
const bool __dw = sizeof(unsigned long long) > sizeof(unsigned long);
|
||||
for (size_t __i = 1 + __dw; __i < _Nw; ++__i)
|
||||
#if __SIZEOF_LONG_LONG__ == __SIZEOF_LONG__
|
||||
return _M_do_to_ulong();
|
||||
#else
|
||||
for (size_t __i = 2; __i < _Nw; ++__i)
|
||||
if (_M_w[__i])
|
||||
__throw_overflow_error(__N("_Base_bitset::_M_do_to_ullong"));
|
||||
|
||||
if (__dw)
|
||||
return _M_w[0] + (static_cast<unsigned long long>(_M_w[1])
|
||||
return _M_w[0] + (static_cast<unsigned long long>(_M_w[1])
|
||||
<< _GLIBCXX_BITSET_BITS_PER_WORD);
|
||||
return _M_w[0];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif // C++11
|
||||
|
||||
template<size_t _Nw>
|
||||
_GLIBCXX14_CONSTEXPR size_t
|
||||
|
||||
Reference in New Issue
Block a user