[erlang-bugs] enif_make_int64 => -0 for INT64_MIN with gcc 4.9.1
Lukas Larsson
lukas@REDACTED
Fri Aug 15 11:46:52 CEST 2014
On 15/08/14 10:42, Mikael Pettersson wrote:
> Lukas Larsson writes:
> > On 14/08/14 20:06, Tuncer Ayaz wrote:
> > > Just started building maint and I've been seeing this:
> > > beam/bif.c:2824:5: runtime error: signed integer overflow:
> > > 429496729 * 10 cannot be represented in type 'int'
> > >
> > Yeah I saw that one, but since we use n to determine if we are to use i,
> > i will never be used while overflowed.
>
> That's unfortunately the wrong way to think about signed overflow in C.
> It is _never_ about whether the computed value is used or not; the mere
> fact that overflow occurred causes undefined behaviour (UB). Furthermore,
> the worst consequence of UB is not that the HW does something wrong, it's
> that the compiler(s) can validly assume that UB doesn't occur, and transform
> the code accordingly. And GCC _will_ do that unless you tell it not to.
Thanks for pointing this out! It would appear that when I hit UB,
deamons might fly out of my nose. I'll fix the other UBs I've found as well.
Lukas
More information about the erlang-bugs
mailing list