When building with GCC, use -fno-strict-aliasing

GCC's interpretation of the C99 aliasing rules, to be charitable,
creates a dialect of C intended for a better programmers than I am
certain of my ability to be in all times.  I just spent 2 hours
tracking down a platform-hyperspecific libevent bug that turned out to
be because of this, and darned if I ever want to do *that* again.

One of Linus's recent rants will give you a picture of why GCC's
behavior here can lead to fun surprises in your binaries:
http://lwn.net/Articles/316126/

svn:r18351
This commit is contained in:
Nick Mathewson 2009-01-31 07:51:02 +00:00
parent ec9c059757
commit 676cfbbf84
2 changed files with 9 additions and 1 deletions

View File

@ -32,6 +32,11 @@ Changes in version 0.2.1.12-alpha - 2009-02-??
- Add a 'getinfo status/clients-seen' controller command, in case - Add a 'getinfo status/clients-seen' controller command, in case
controllers want to hear clients_seen events but connect late. controllers want to hear clients_seen events but connect late.
o Build changes
- Disable GCC's strict alias optimization by default, to avoid the
likelihood of its introducing subtle bugs whenever our code violates
the letter of C99's alias rules.
Changes in version 0.2.1.11-alpha - 2009-01-20 Changes in version 0.2.1.11-alpha - 2009-01-20
o Security fixes: o Security fixes:

View File

@ -754,8 +754,11 @@ AC_SUBST(LOCALSTATEDIR)
# Set CFLAGS _after_ all the above checks, since our warnings are stricter # Set CFLAGS _after_ all the above checks, since our warnings are stricter
# than autoconf's macros like. # than autoconf's macros like.
if test "$ac_cv_c_compiler_gnu" = yes; then if test "$GCC" = yes; then
CFLAGS="$CFLAGS -Wall -g -O2" CFLAGS="$CFLAGS -Wall -g -O2"
# Disable GCC's strict aliasing checks. They are an hours-to-debug
# accident waiting to happen.
CFLAGS="$CFLAGS -fno-strict-aliasing"
else else
CFLAGS="$CFLAGS -g -O" CFLAGS="$CFLAGS -g -O"
enable_gcc_warnings=no enable_gcc_warnings=no