Comment by iforgotpassword

3 years ago

I blame GCC. The C standards committee is some out of touch with reality conglomerate working in a vacuum, taking 50 years of language history into account.

I expect my compiler vendor to be on my side, ie produce a compiler that helps me write good software and not get in my way. GCC is doing the opposite, it's deliberately looking to use the standard to fuck me over in the most subtle and unexpected ways. Signed integer overflow is undefined; that gives compiler authors the liberty to make it do anything they want, including well defined things that anyone would expect and find useful. But GCC decides to fuck you over so their devs can give you an arrogant reply and impose their superiority if you show up on their bug tracker.

Turns out people get upset when their code goes slower because the the compiler added traps on signed overflow.

  • Don't add traps, just let it overflow and don't fuck up any bounds checks the programmer added.

    • That's still slower than UB.

      With UB compilers can assume that eg 'x + 1 > x' is always true for signed integers. That allows quite a few optimizations.

      2 replies →

    • > just let it overflow

      I agree with this. Making integer overflow UB is ridiculous.

      > and don't fuck up any bounds checks

      But I disagree with this. That's just normal UB-based optimization, one of the point of having UB at all is to do such optimization.

      1 reply →

GCC's developers work for companies that want more optimizations. UB is the way you get these optimizations.

But "gcc -fsanitize=undefined" is just as easy to run as "gcc -O3" is.