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:
Marshall Clow
2017-09-20 17:34:11 +00:00
parent 3a84027eb1
commit e2b6832fcd

View File

@@ -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;