mirror of
https://github.com/mirror/tinycc.git
synced 2024-12-26 03:50:07 +08:00
(bug caused by tcc intristics)
reproduce bug: $ ./configure --cc=gcc $ make $ make install (OK) run a test: extern int printf(const char *str, ...); int main() { int t2 = (int)(-1.847759065f * 4096); printf("%d\n", t2); } $ tcc test.c $ ./a.out $ -7568 (OK) (self compiled now) $ ./configure --cc=tcc $ make $ make install (OK) $ tcc test.c $ ./a.out $ 7568 (WRONG!!!) why: gcc does not have intristics for uint to long double conversion therefore it does cast implicitly, so the sign bit is preserved, but this does not happen when __fixunsxfdi is called because tcc was bootstrapped. solution: force cast to int64 and preserve the sign bit. side effects: not found.
This commit is contained in:
parent
55f8963dfa
commit
310e3b428c
Loading…
Reference in New Issue
Block a user