From 676cfbbf8404c62c420223f5aee4bd8c5e69cee0 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sat, 31 Jan 2009 07:51:02 +0000 Subject: [PATCH] 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 --- ChangeLog | 5 +++++ configure.in | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 788658da5b..b9a932aa50 100644 --- a/ChangeLog +++ b/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: diff --git a/configure.in b/configure.in index 52c40cb7c0..c661b377bb 100644 --- a/configure.in +++ b/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