mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
ubsan: signed integer multiply overflow
9223371018427387904 * 2 cannot be represented in type 'long', yes, but we don't care. * expr.c (expr): Avoid signed overflow.
This commit is contained in:
@ -1959,7 +1959,12 @@ expr (int rankarg, /* Larger # is higher rank. */
|
|||||||
switch (op_left)
|
switch (op_left)
|
||||||
{
|
{
|
||||||
default: goto general;
|
default: goto general;
|
||||||
case O_multiply: resultP->X_add_number *= v; break;
|
case O_multiply:
|
||||||
|
/* Do the multiply as unsigned to silence ubsan. The
|
||||||
|
result is of course the same when we throw away high
|
||||||
|
bits of the result. */
|
||||||
|
resultP->X_add_number *= (valueT) v;
|
||||||
|
break;
|
||||||
case O_divide: resultP->X_add_number /= v; break;
|
case O_divide: resultP->X_add_number /= v; break;
|
||||||
case O_modulus: resultP->X_add_number %= v; break;
|
case O_modulus: resultP->X_add_number %= v; break;
|
||||||
case O_left_shift:
|
case O_left_shift:
|
||||||
|
Reference in New Issue
Block a user