Browse Source

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.
binutils-2_38-branch
Alan Modra 4 years ago
parent
commit
487b0ff02d
  1. 7
      gas/expr.c

7
gas/expr.c

@ -1959,7 +1959,12 @@ expr (int rankarg, /* Larger # is higher rank. */
switch (op_left)
{
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_modulus: resultP->X_add_number %= v; break;
case O_left_shift:

Loading…
Cancel
Save