tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] wrong preprocessor shift operation


From: grischka
Subject: Re: [Tinycc-devel] wrong preprocessor shift operation
Date: Mon, 29 Dec 2008 19:59:19 +0100
User-agent: Thunderbird 2.0.0.18 (X11/20081125)

Christian Jullien wrote:
Simple code below is wrong, even when forcing to long or unsigned long :

            printf("%08x\n", ((~0) >> 1));
            printf("%08x\n", (unsigned long)((~(unsigned long)0) >> 1));
            printf("%08x\n", (long)((~(long)0) >> 1));

It prints

ffffffff while 7fffffff is expected.

Well, shouldn't it be:
ffffffff
7fffffff
ffffffff

I played a little bit with sources and

F:\tmp\tinycc\win32>diff ..\tcc.BAK ..\tcc.c
5559,5560c5559,5572
<     l1 = (t1 == VT_LLONG) ? v1->c.ll : v1->c.i;
<     l2 = (t2 == VT_LLONG) ? v2->c.ll : v2->c.i;
---
    if (t1 == VT_LLONG) {
      l1 = v1->c.ll;
    } else {
      l1 = v1->c.i;
      l1 &= 0xffffffff;
    }

    if (t2 == VT_LLONG) {
      l2 = v2->c.ll;
    } else {
      l2 = v2->c.i;
      l2 &= 0xffffffff;
    }


Probably "unsigned int" needs to be distinguished from "int".

Anyway, if you want to you can push a fix on our "mob" branch, See:
http://lists.gnu.org/archive/html/tinycc-devel/2008-11/msg00035.html

Thanks.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]