From b8011947a8f13009ba5120aed26b01af8b705be1 Mon Sep 17 00:00:00 2001 From: Rangi Date: Thu, 9 Jul 2026 21:36:34 -0400 Subject: [PATCH] Correct assumption to avoid UB with 1 << 31 --- src/asm/rpn.cpp | 4 ++-- src/link/patch.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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(