Skip to content
  • grischka's avatar
    tccgen: fix long long -> char/short cast · c2ad11ac
    grischka authored
    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
    c2ad11ac