Old GCC easter egg (aka implementation-defined behavior)
1–7 of 7 posts
Re: Old GCC easter egg (aka implementation-defined behavior)
#2Re: Old GCC easter egg (aka implementation-defined behavior)
#3Undefined and implementation-defined behaviour are tricky. They've been doing a better job of it recently, but I do wish compilers warned you more when encountering code with undefined behavior. Sometimes it's very hard or impossible to detect reliably, for example when doing pointer arithmetic acrobatics. But things like modifying a variable twice within a sequence point, or reading potentially uninitialised variabl…
Re: Old GCC easter egg (aka implementation-defined behavior)
#4Undefined and implementation-defined behaviour are tricky. They've been doing a better job of it recently, but I do wish compilers warned you more when encountering code with undefined behavior. Sometimes it's very hard or impossible to detect reliably, for example when doing pointer arithmetic acrobatics. But things like modifying a variable twice within a sequence point, or reading potentially uninitialised variabl…
gcc (4.3.4 on my box) is pretty vocal and explicit about all the shenanigans you mentioned.
FWIW, GCC 4.2.1 on OSX 10.6 silently accepts
x += ++x;
by default. -Wall catches it, at least. I'm trying to think of a reason why the warning might not be on by default - I can only assume it's either lumped in with some other, less reliable undefined behaviour detection, such as aliasing. -Wall doesn't even catch trivial cases of aliasing though, such as int* y = &x;
x += ++*y;
Maybe it's the default in a newer version, or this is Apple messing with me, not GNU.Re: Old GCC easter egg (aka implementation-defined behavior)
#5Earlier quoted context omitted.
gcc (4.3.4 on my box) is pretty vocal and explicit about all the shenanigans you mentioned.
GCC 4 has seen big improvements in that area, especially with -Wall. Other compilers (except clang) not so much. FWIW, GCC 4.2.1 on OSX 10.6 silently accepts x += ++x; by default. -Wall catches it, at least. I'm trying to think of a reason why the warning might not be on by default - I can only assume it's either lumped in with some other, less reliable undefined behaviour detection, such as aliasing. -Wall doesn't e…
Re: Old GCC easter egg (aka implementation-defined behavior)
#6Re: Old GCC easter egg (aka implementation-defined behavior)
#7Earlier quoted context omitted.
gcc (4.3.4 on my box) is pretty vocal and explicit about all the shenanigans you mentioned.
GCC 4 has seen big improvements in that area, especially with -Wall. Other compilers (except clang) not so much. FWIW, GCC 4.2.1 on OSX 10.6 silently accepts x += ++x; by default. -Wall catches it, at least. I'm trying to think of a reason why the warning might not be on by default - I can only assume it's either lumped in with some other, less reliable undefined behaviour detection, such as aliasing. -Wall doesn't e…