tccgen: fix long long -> char/short cast

This was causing assembler bugs in a tcc compiled by itself
at i386-asm.c:352 when ExprValue.v was changed to uint64_t:

    if (op->e.v == (int8_t)op->e.v)
        op->type |= OP_IM8S;

A general test case:

    #include <stdio.h>
    int main(int argc, char **argv)
    {
        long long ll = 4000;
        int i = (char)ll;
        printf("%d\n", i);
        return 0;
    }

Output was "4000", now "-96".

Also: add "asmtest2" as asmtest with tcc compiled by itself
This commit is contained in:
grischka
2016-10-02 01:38:22 +02:00
parent f350487e1e
commit c2ad11ac70
3 changed files with 12 additions and 4 deletions

View File

@ -696,6 +696,7 @@ int $0x10
inc %eax
#endif
#ifndef _WIN32
ft1: ft2: ft3: ft4: ft5: ft6: ft7: ft8: ft9:
xor %eax, %eax
ret
@ -708,6 +709,7 @@ ft1: ft2: ft3: ft4: ft5: ft6: ft7: ft8: ft9:
.type ft6,@function
.type ft7,%function
.type ft8,"function"
#endif
pause
.rept 6