GNU bug report logs -
#41615
[feature/native-comp] Dump prettier C code.
Previous Next
Full log
Message #44 received at 41615 <at> debbugs.gnu.org (full text, mbox):
Nicolas Bértolo <nicolasbertolo <at> gmail.com> writes:
>> The whole compilation is something like 5x faster here.
> Amazing.I took a closer look at the code that uses casts to bools and
> I think I found a
> bug.
>
> Casting to bool using an enum is equivalent to taking the lowest byte using
> a byte mask. This wrongly casts to "false" integers whose lowest byte is nil.
>
> bool cast_from_unsigned_long_long_to_bool (unsigned long long x)
> {
> return (x & 0xFF);
> }
>
> The correct way to cast to bool is to mimic C semantics:
>
> bool cast_from_unsigned_long_long_to_bool (unsigned long long x)
> {
> if (x != 0)
> return true;
> else
> return false;
> }
>
> Am I right?
>
> Nico.
Okay, now I recall better the whole story.
I believe is okay that emit_coerce can truncate numbers (as regular cast
can do).
Where we have to be careful is into coercing before calling
'emit_cond_jump', again the same attention we use in C when casting
values.
BTW IIRC I've experienced libgccjit crashed on brances with non boolean
tests. At the time I cured that directly in 'emit_cond_jump' performing
a negation on the number to extract the boolean to be used as a test,
this works well.
Andrea
--
akrl <at> sdf.org
This bug report was last modified 5 years and 39 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.