Browse Source

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
Nick Mathewson 15 years ago
parent
commit
676cfbbf84
2 changed files with 9 additions and 1 deletions
  1. 5 0
      ChangeLog
  2. 4 1
      configure.in

+ 5 - 0
ChangeLog

@@ -32,6 +32,11 @@ Changes in version 0.2.1.12-alpha - 2009-02-??
     - Add a 'getinfo status/clients-seen' controller command, in case
       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
   o Security fixes:

+ 4 - 1
configure.in

@@ -754,8 +754,11 @@ AC_SUBST(LOCALSTATEDIR)
 
 # Set CFLAGS _after_ all the above checks, since our warnings are stricter
 # than autoconf's macros like.
-if test "$ac_cv_c_compiler_gnu" = yes; then
+if test "$GCC" = yes; then
   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
   CFLAGS="$CFLAGS -g -O"
   enable_gcc_warnings=no