mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-27 06:10:06 +08:00
Incorrect shift result type with 64-bit ABI
On 2012-06-26 15:07:57 +0200, Vincent Lefevre wrote: > ISO C99 TC3 says: [6.5.7#3] "The integer promotions are performed on > each of the operands. The type of the result is that of the promoted > left operand." I've written a patch (attached). Now the shift problems no longer occur with the testcase and with GNU MPFR's "make check". -- Vincent Lefèvre <vincent@vinc17.net> - Web: <http://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
This commit is contained in:
parent
42c1b6ba38
commit
240064c03b
3
tccgen.c
3
tccgen.c
@ -1678,6 +1678,9 @@ ST_FUNC void gen_op(int op)
|
||||
(op < TOK_ULT || op > TOK_GT))
|
||||
tcc_error("invalid operands for binary operation");
|
||||
goto std_op;
|
||||
} else if (op == TOK_SHR || op == TOK_SAR || op == TOK_SHL) {
|
||||
t = (bt1 == VT_LLONG ? VT_LLONG : VT_INT) | (t1 & VT_UNSIGNED);
|
||||
goto std_op;
|
||||
} else if (bt1 == VT_LLONG || bt2 == VT_LLONG) {
|
||||
/* cast to biggest op */
|
||||
t = VT_LLONG;
|
||||
|
Loading…
Reference in New Issue
Block a user