util/romcc: avoid shifting more than the variable's width
That's undefined behavior in C Change-Id: I671ed8abf02e57a7cc993d1a85354e905f51717d Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Found-by: Coverity Scan #1229557 Reviewed-on: https://review.coreboot.org/18014 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
parent
6d0c65ebc6
commit
766c3fec2d
|
@ -10021,13 +10021,13 @@ static void simplify_copy(struct compile_state *state, struct triple *ins)
|
||||||
/* Ensure I am properly sign extended */
|
/* Ensure I am properly sign extended */
|
||||||
if (size_of(state, right->type) < size_of(state, ins->type) &&
|
if (size_of(state, right->type) < size_of(state, ins->type) &&
|
||||||
is_signed(right->type)) {
|
is_signed(right->type)) {
|
||||||
long_t val;
|
uint64_t val;
|
||||||
int shift;
|
int shift;
|
||||||
shift = SIZEOF_LONG - size_of(state, right->type);
|
shift = SIZEOF_LONG - size_of(state, right->type);
|
||||||
val = left;
|
val = left;
|
||||||
val <<= shift;
|
val <<= shift;
|
||||||
val >>= shift;
|
val >>= shift;
|
||||||
left = val;
|
left = (ulong_t)val;
|
||||||
}
|
}
|
||||||
mkconst(state, ins, left);
|
mkconst(state, ins, left);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue