pcm/FloatConvert: fix compile-time integer overflow for S32

The compile-time calculation for `factor` overflows because `1<<31`
cannot be represented by `int`.  By casting to `uintmax_t` first, we
can avoid this overflow.

Closes #380
This commit is contained in:
Max Kellermann 2018-10-29 22:47:53 +01:00
parent a3f7127e72
commit cc5fab28af
2 changed files with 2 additions and 1 deletions

1
NEWS
View File

@ -1,6 +1,7 @@
ver 0.20.23 (not yet released)
* protocol
- emit "player" idle event when restarting the current song
* fix broken float to s32 conversion
* new clang crash bug workaround
ver 0.20.22 (2018/10/23)

View File

@ -34,7 +34,7 @@ struct FloatToIntegerSampleConvert {
typedef typename SrcTraits::long_type SL;
typedef typename DstTraits::value_type DV;
static constexpr SV factor = 1 << (DstTraits::BITS - 1);
static constexpr SV factor = uintmax_t(1) << (DstTraits::BITS - 1);
static_assert(factor > 0, "Wrong factor");
gcc_const