Merge pull request #336 from theAlexes/theAlexes/sanitize

fix undefined behavior found by clang's sanitize

The compiler isn't completely assured of the possible range of this variable. Probably harmless, but it clears up a clang sanitize error.
This commit is contained in:
Wesley Aptekar-Cassels 2023-12-06 21:49:58 -05:00 committed by GitHub
commit 63d6bc6aa0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 4 deletions

View file

@ -84,7 +84,7 @@ void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequen
if (__builtin_popcount(frequency) != 1) return; if (__builtin_popcount(frequency) != 1) return;
// this left-justifies the period in a 32-bit integer. // this left-justifies the period in a 32-bit integer.
uint32_t tmp = frequency << 24; uint32_t tmp = (frequency & 0xFF) << 24;
// now we can count the leading zeroes to get the value we need. // now we can count the leading zeroes to get the value we need.
// 0x01 (1 Hz) will have 7 leading zeros for PER7. 0xF0 (128 Hz) will have no leading zeroes for PER0. // 0x01 (1 Hz) will have 7 leading zeros for PER7. 0xF0 (128 Hz) will have no leading zeroes for PER0.
uint8_t per_n = __builtin_clz(tmp); uint8_t per_n = __builtin_clz(tmp);
@ -99,7 +99,7 @@ void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequen
void watch_rtc_disable_periodic_callback(uint8_t frequency) { void watch_rtc_disable_periodic_callback(uint8_t frequency) {
if (__builtin_popcount(frequency) != 1) return; if (__builtin_popcount(frequency) != 1) return;
uint8_t per_n = __builtin_clz(frequency << 24); uint8_t per_n = __builtin_clz((frequency & 0xFF) << 24);
RTC->MODE2.INTENCLR.reg = 1 << per_n; RTC->MODE2.INTENCLR.reg = 1 << per_n;
} }

View file

@ -92,7 +92,7 @@ void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequen
if (__builtin_popcount(frequency) != 1) return; if (__builtin_popcount(frequency) != 1) return;
// this left-justifies the period in a 32-bit integer. // this left-justifies the period in a 32-bit integer.
uint32_t tmp = frequency << 24; uint32_t tmp = (frequency & 0xFF) << 24;
// now we can count the leading zeroes to get the value we need. // now we can count the leading zeroes to get the value we need.
// 0x01 (1 Hz) will have 7 leading zeros for PER7. 0xF0 (128 Hz) will have no leading zeroes for PER0. // 0x01 (1 Hz) will have 7 leading zeros for PER7. 0xF0 (128 Hz) will have no leading zeroes for PER0.
uint8_t per_n = __builtin_clz(tmp); uint8_t per_n = __builtin_clz(tmp);
@ -105,7 +105,7 @@ void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequen
void watch_rtc_disable_periodic_callback(uint8_t frequency) { void watch_rtc_disable_periodic_callback(uint8_t frequency) {
if (__builtin_popcount(frequency) != 1) return; if (__builtin_popcount(frequency) != 1) return;
uint8_t per_n = __builtin_clz(frequency << 24); uint8_t per_n = __builtin_clz((frequency & 0xFF) << 24);
if (tick_callbacks[per_n] != -1) { if (tick_callbacks[per_n] != -1) {
emscripten_clear_interval(tick_callbacks[per_n]); emscripten_clear_interval(tick_callbacks[per_n]);
tick_callbacks[per_n] = -1; tick_callbacks[per_n] = -1;