Correct assumption to avoid UB with 1 << 31

This commit is contained in:
Rangi
2026-07-09 21:36:34 -04:00
parent 39e7e064c9
commit b8011947a8
2 changed files with 4 additions and 4 deletions
+2 -2
View File
@@ -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(
+2 -2
View File
@@ -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(