Hi, Eelco Dolstra <[email protected]> writes:
> * A patch for compiling the ATerm library with GCC 4.3. Without it, > the code for resizing ATerm tables gets stuck in an infinite loop > (http://bugzilla.sen.cwi.nl:8080/show_bug.cgi?id=841). The problem > is in this bit of code in hash.c, which tries to dynamically figure > out the maximum signed integer: > > long try_long_max; > long long_max; > long delta; > > try_long_max = 1; > do { > long_max = try_long_max; > try_long_max = long_max * 2; > } while (try_long_max > 0); > > At -O2, GCC 4.3 determines that 1 * 2 * 2 * ... can never be <= 0, > and so it optimises this into a 1-instruction infinite loop: > > 0x0805a782 <keyPut+1282>: jmp 0x805a782 <keyPut+1282> > > Quite beautiful really. ;-) Such hacks are bound to fail, per ANSI C, which does not define the behavior resulting from signed arithmetic overflow. See the GCC doc for `-fstrict-overflow' (info "(gcc) Optimize Options"). Thanks, Ludo'. _______________________________________________ nix-dev mailing list [email protected] https://mail.cs.uu.nl/mailman/listinfo/nix-dev
