diff --git a/src/asm/rpn.cpp b/src/asm/rpn.cpp index a479ac27..0c956af4 100644 --- a/src/asm/rpn.cpp +++ b/src/asm/rpn.cpp @@ -485,8 +485,8 @@ void Expression::checkNBit(uint8_t n) const { } bool checkNBit(int32_t v, uint8_t n, char const *name) { - assume(n != 0); // That doesn't make sense - assume(n < CHAR_BIT * sizeof(int)); // Otherwise `1 << n` is UB + assume(n != 0); // That doesn't make sense + assume(n < CHAR_BIT * sizeof(int) - 1); // Otherwise `1 << n` is UB if (v < -(1 << n) || v >= 1 << n) { warning( diff --git a/src/link/patch.cpp b/src/link/patch.cpp index bc58af53..e1ea336c 100644 --- a/src/link/patch.cpp +++ b/src/link/patch.cpp @@ -521,8 +521,8 @@ void patch_CheckAssertions() { } static void checkPatchSize(Patch const &patch, int32_t v, uint8_t n) { - assume(n != 0); // That doesn't make sense - assume(n < CHAR_BIT * sizeof(int)); // Otherwise `1 << n` is UB + assume(n != 0); // That doesn't make sense + assume(n < CHAR_BIT * sizeof(int) - 1); // Otherwise `1 << n` is UB if (v < -(1 << n) || v >= 1 << n) { diagnosticAt(