Fix a bit of UB in __independent_bits_engine. Fixes PR#34663
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@313776 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -3013,6 +3013,7 @@ template<class _Engine, class _UIntType>
|
|||||||
_UIntType
|
_UIntType
|
||||||
__independent_bits_engine<_Engine, _UIntType>::__eval(true_type)
|
__independent_bits_engine<_Engine, _UIntType>::__eval(true_type)
|
||||||
{
|
{
|
||||||
|
const size_t _WRt = numeric_limits<result_type>::digits;
|
||||||
result_type _Sp = 0;
|
result_type _Sp = 0;
|
||||||
for (size_t __k = 0; __k < __n0_; ++__k)
|
for (size_t __k = 0; __k < __n0_; ++__k)
|
||||||
{
|
{
|
||||||
@@ -3021,7 +3022,7 @@ __independent_bits_engine<_Engine, _UIntType>::__eval(true_type)
|
|||||||
{
|
{
|
||||||
__u = __e_() - _Engine::min();
|
__u = __e_() - _Engine::min();
|
||||||
} while (__u >= __y0_);
|
} while (__u >= __y0_);
|
||||||
if (__w0_ < _WDt)
|
if (__w0_ < _WRt)
|
||||||
_Sp <<= __w0_;
|
_Sp <<= __w0_;
|
||||||
else
|
else
|
||||||
_Sp = 0;
|
_Sp = 0;
|
||||||
@@ -3034,7 +3035,7 @@ __independent_bits_engine<_Engine, _UIntType>::__eval(true_type)
|
|||||||
{
|
{
|
||||||
__u = __e_() - _Engine::min();
|
__u = __e_() - _Engine::min();
|
||||||
} while (__u >= __y1_);
|
} while (__u >= __y1_);
|
||||||
if (__w0_ < _WDt - 1)
|
if (__w0_ < _WRt - 1)
|
||||||
_Sp <<= __w0_ + 1;
|
_Sp <<= __w0_ + 1;
|
||||||
else
|
else
|
||||||
_Sp = 0;
|
_Sp = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user