From: Nick Mathewson Date: Sat, 31 Jan 2009 07:31:47 +0000 (+0000) Subject: Build with the -fno-strict-aliasing flag on GCC. X-Git-Tag: release-2.0.1-alpha~106 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=52eb4951302554dd696d6a0120ad5d3f6cffb7bb;p=libevent Build with the -fno-strict-aliasing flag on GCC. You do not want to know about the 2 hours I just spent tracking down an evdns bug that only affected me on some platforms to the way we were using sockaddr* and sockaddr_in*. Suffice it to say that I do not think this is the only C99-aliasing-dubiousness in our code, nor that I am smart enough to keep my code correct with the GCC's strict aliasing optimizations in place. svn:r1079 --- diff --git a/configure.in b/configure.in index 503e4b49..6b084582 100644 --- a/configure.in +++ b/configure.in @@ -19,7 +19,11 @@ AC_PROG_LN_S AC_PROG_GCC_TRADITIONAL if test "$GCC" = yes ; then + # Enable many gcc warnings by default... CFLAGS="$CFLAGS -Wall" + # And disable the strict-aliasing optimization, since it breaks + # our sockaddr-handling code in strange ways. + CFLAGS="$CFLAGS -fno-strict-aliasing" fi AC_ARG_ENABLE(gcc-warnings, @@ -433,13 +437,13 @@ if test x$enable_gcc_warnings = xyes; then CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wbad-function-cast -Wswitch-enum -Werror" CFLAGS="$CFLAGS -Wno-unused-parameter -Wno-sign-compare -Wstrict-aliasing" - if test x$have_gcc4 = xyes ; then + if test x$have_gcc4 = xyes ; then # These warnings break gcc 3.3.5 and work on gcc 4.0.2 CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement" #CFLAGS="$CFLAGS -Wold-style-definition" fi - if test x$have_gcc42 = xyes ; then + if test x$have_gcc42 = xyes ; then # These warnings break gcc 4.0.2 and work on gcc 4.2 CFLAGS="$CFLAGS -Waddress -Wnormalized=id -Woverride-init" fi diff --git a/evdns.c b/evdns.c index d86d52a0..aad21e27 100644 --- a/evdns.c +++ b/evdns.c @@ -3468,6 +3468,7 @@ main(int c, char **v) { ++idx; } event_init(); + evdns_init(); if (verbose) evdns_set_log_fn(logfn); evdns_resolv_conf_parse(DNS_OPTION_NAMESERVERS, "/etc/resolv.conf");