mirror of
https://github.com/python/cpython.git
synced 2024-11-30 13:24:13 +08:00
gh-106550: Fix sign conversion in pycore_code.h (#112613)
Fix sign conversion in pycore_code.h: use unsigned integers and cast explicitly when needed.
This commit is contained in:
parent
dee7beeb4f
commit
a74902a14c
@ -394,27 +394,29 @@ write_varint(uint8_t *ptr, unsigned int val)
|
||||
val >>= 6;
|
||||
written++;
|
||||
}
|
||||
*ptr = val;
|
||||
*ptr = (uint8_t)val;
|
||||
return written;
|
||||
}
|
||||
|
||||
static inline int
|
||||
write_signed_varint(uint8_t *ptr, int val)
|
||||
{
|
||||
unsigned int uval;
|
||||
if (val < 0) {
|
||||
val = ((-val)<<1) | 1;
|
||||
// (unsigned int)(-val) has an undefined behavior for INT_MIN
|
||||
uval = ((0 - (unsigned int)val) << 1) | 1;
|
||||
}
|
||||
else {
|
||||
val = val << 1;
|
||||
uval = (unsigned int)val << 1;
|
||||
}
|
||||
return write_varint(ptr, val);
|
||||
return write_varint(ptr, uval);
|
||||
}
|
||||
|
||||
static inline int
|
||||
write_location_entry_start(uint8_t *ptr, int code, int length)
|
||||
{
|
||||
assert((code & 15) == code);
|
||||
*ptr = 128 | (code << 3) | (length - 1);
|
||||
*ptr = 128 | (uint8_t)(code << 3) | (uint8_t)(length - 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -454,9 +456,9 @@ write_location_entry_start(uint8_t *ptr, int code, int length)
|
||||
|
||||
|
||||
static inline uint16_t
|
||||
adaptive_counter_bits(int value, int backoff) {
|
||||
return (value << ADAPTIVE_BACKOFF_BITS) |
|
||||
(backoff & ((1<<ADAPTIVE_BACKOFF_BITS)-1));
|
||||
adaptive_counter_bits(uint16_t value, uint16_t backoff) {
|
||||
return ((value << ADAPTIVE_BACKOFF_BITS)
|
||||
| (backoff & ((1 << ADAPTIVE_BACKOFF_BITS) - 1)));
|
||||
}
|
||||
|
||||
static inline uint16_t
|
||||
@ -473,12 +475,12 @@ adaptive_counter_cooldown(void) {
|
||||
|
||||
static inline uint16_t
|
||||
adaptive_counter_backoff(uint16_t counter) {
|
||||
unsigned int backoff = counter & ((1<<ADAPTIVE_BACKOFF_BITS)-1);
|
||||
uint16_t backoff = counter & ((1 << ADAPTIVE_BACKOFF_BITS) - 1);
|
||||
backoff++;
|
||||
if (backoff > MAX_BACKOFF_VALUE) {
|
||||
backoff = MAX_BACKOFF_VALUE;
|
||||
}
|
||||
unsigned int value = (1 << backoff) - 1;
|
||||
uint16_t value = (uint16_t)(1 << backoff) - 1;
|
||||
return adaptive_counter_bits(value, backoff);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user