...
Recent versions of GCC turn on the option -fstrict-aliasing
(which allows alias-based optimizations) by default with -O2
. Some architectures then print "1111 1111" as a result. Without optimization, the executable will generate generates the "expected" output "2222 2222".
To disable optimizations based on alias-analysis for faulty legacy code, the option -fno-strict-aliasing
can be used as a workaround. The option -Wstrict-aliasing
(which is included in -Wall
) warns about some, but not all, violations of aliasing rules when -fstrict-aliasing
is active.
When GCC 3.4.6 compiles this code with optimization, the assignment through the aliased pointer is effectively eliminated.
...