3 ms·
The library my dad wrote (lol) for the PDP-11 is probably full of undefined behaviour and won't work now that optimizers are using any gap in the standard to mi
by ErikCorry 4y ago
The library my dad wrote (lol) for the PDP-11 is probably full of undefined behaviour and won't work now that optimizers are using any gap in the standard to miscompile code.
- flqn 4y agoWhat a useless and jaded assumption that code written in the past is bad.
- jolux 4y agoThe assumption being made here is "any useful C program relies on undefined behavior" which is pretty much true.
- ErikCorry 4y agoYes and I'm sure it's doubly true of code that was written before the C standards were written.
- pantalaimon 4y agoThat sounds like a strong take - to you have examples? Compiling with -Wall -Werror is pretty much standard those days.
- morelisp 4y ago-Wall -Werror is mostly designed to catch dangerous but totally well-defined idioms, not UB. It doesn't warn on every signed arithmetic operation or unchecked array access, for example.
- jolux 4y agoSee "useful" — it may not be not quite as strong as you're thinking. It may be possible to write a minimal C program without UB, but I'm thinking of larger programs, more than a few hundred lines. Common UB includes: array access out of bounds, dereferencing a null pointer, use after free, use of uninitialized variables. -Wall -Werror can catch some instances of some types of UB, and runtime libraries like UBSan can catch more. But they're not exhaustive.
- ErikCorry 4y agoI certainly didn't say it was bad. Just that it went outside the boundaries of a standard that was written 25 years later.
- jolux 4y ago> using any gap in the standard to miscompile code For code to be miscompiled, there has to be a definition of what correctly compiling it would mean, and if there were, it would not be undefined behavior.
- ErikCorry 4y agoInstead of "miscompiled" you can read "Doesn't do what it did on the PDP-11 with the compilers of the time".
- xg15 4y agoYeah, but if that definition is constantly shifting, you cannot expect it to work with existing codebases.
- jolux 4y agoWell yeah — therein lies the problem with a language with pervasive undefined behavior.
- temac 4y agoThe standard doesn't do that often, but it does sometimes. E.g. realloc to null which was previously defined, and is now UB :(
- ErikCorry 4y agoWe are taking about code written before the standard so every bit of UB in the standard is in play here. Eg the fact that overflowing a signed int can cause the compiler to go amuck would certainly be a surprise to the person who wrote code for the PDP-11.