fixed sign extension in some type conversions (Dave Dodge)

tcc-xref
bellard 2006-10-28 14:47:39 +00:00
parent 65b974e396
commit fb2c34f8cd
1 changed files with 4 additions and 0 deletions

4
tcc.c
View File

@ -5764,6 +5764,10 @@ void force_charshort_cast(int t)
bits = 32 - bits;
vpushi(bits);
gen_op(TOK_SHL);
/* result must be signed or the SAR is converted to an SHL
This was not the case when "t" was a signed short
and the last value on the stack was an unsigned int */
vtop->type.t &= ~VT_UNSIGNED;
vpushi(bits);
gen_op(TOK_SAR);
}