diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-03-10 21:50:31 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-03-10 21:50:31 +0000 |
commit | 3a5288960df40f1794cc358314fcdb4b53ff5ef9 (patch) | |
tree | e0419b99bbb6d2e2c53fb82086bd55973cd9789d | |
parent | 44851c93351e117de89a3d77b8993c0c717bb61d (diff) | |
download | postgresql-3a5288960df40f1794cc358314fcdb4b53ff5ef9.tar.gz postgresql-3a5288960df40f1794cc358314fcdb4b53ff5ef9.zip |
Use -fwrapv in CFLAGS if we are using a version of gcc that accepts this flag.
This prevents compiler optimizations that assume overflow won't occur, which
breaks numerous overflow tests that we need to have working. It is known
that gcc 4.3 causes problems and possible that 4.1 does. Per my proposal
of some time ago and a recent report from Kris Jurka.
Backpatch as far as 8.0, which is as far as the patch conveniently goes.
7.x was pretty short of overflow tests anyway, so it may not matter there,
even assuming that anyone cares whether 7.x builds on recent gcc.
-rwxr-xr-x | configure | 54 | ||||
-rw-r--r-- | configure.in | 4 |
2 files changed, 57 insertions, 1 deletions
diff --git a/configure b/configure index 23dc93746d0..0f73a980f4b 100755 --- a/configure +++ b/configure @@ -3086,6 +3086,60 @@ echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + # Disable optimizations that assume no overflow; needed for gcc 4.3+ + echo "$as_me:$LINENO: checking if $CC supports -fwrapv" >&5 +echo $ECHO_N "checking if $CC supports -fwrapv... $ECHO_C" >&6 +pgac_save_CFLAGS=$CFLAGS +CFLAGS="$pgac_save_CFLAGS -fwrapv" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +CFLAGS="$pgac_save_CFLAGS" + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + elif test x"${CC}" = x"xlc"; then # AIX xlc has to have strict aliasing turned off too echo "$as_me:$LINENO: checking if $CC supports -qnoansialias" >&5 diff --git a/configure.in b/configure.in index c4464537f15..cddcf27f36c 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -dnl $PostgreSQL: pgsql/configure.in,v 1.490.2.15 2008/02/24 05:22:11 tgl Exp $ +dnl $PostgreSQL: pgsql/configure.in,v 1.490.2.16 2008/03/10 21:50:31 tgl Exp $ dnl dnl Developers, please strive to achieve this order: dnl @@ -290,6 +290,8 @@ choke me # Disable strict-aliasing rules; needed for gcc 3.3+ PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) + # Disable optimizations that assume no overflow; needed for gcc 4.3+ + PGAC_PROG_CC_CFLAGS_OPT([-fwrapv]) elif test x"${CC}" = x"xlc"; then # AIX xlc has to have strict aliasing turned off too PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias]) |