tinycc-devel
[Top][All Lists]
Advanced

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

Re: [Tinycc-devel] Request for "fix float to u64 intrinsics"


From: Kyryl Melekhin
Subject: Re: [Tinycc-devel] Request for "fix float to u64 intrinsics"
Date: Fri, 11 Sep 2020 11:11:47 +0000

If this is undefined behavior, then this line is straight up also UB.
https://repo.or.cz/tinycc.git/blobdiff/55f8963dfab5c543f7f34589d3ef9d3f2da3db14..310e3b428cfd181b51723276e6563b90d670da06:/tccgen.c
And because that line is UB, then it causes even more bugs down the drain.
At least if the output for this UB matches what other compilers generate
some bugs can be eliminated. But what gets me the most is why doesn't
gcc or clang compiler warn on any of this. Also how come we can't
represent a 32 bit
float in a 64 bit number? On x86_64 we sure can. Then you are citing ISO 17
while we don't even have full support for C11.

пт, 11 сент. 2020 г. в 14:43, Vincent Lefevre <vincent@vinc17.net>:
>
> On 2020-09-11 10:32:06 +0000, Kyryl Melekhin wrote:
> > I guess I'll explain the bug here as well.
> > consider this code:
> >
> > float a = -123.987;
> > printf("%lu", (unsigned long int)a);
> >
> > Before the patch output would be 123.
> > After the patch output would be 18446744073709551493.
>
> There's no bug. That's undefined behavior (see ISO C17, 6.3.1.4)
> because -123 is not representable in unsigned long int. So, any
> behavior is correct.
>
> --
> Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
>
> _______________________________________________
> Tinycc-devel mailing list
> Tinycc-devel@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel



reply via email to

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