]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Use -fwrapv in CFLAGS if we are using a version of gcc that accepts this flag.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Mar 2008 21:50:50 +0000 (21:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Mar 2008 21:50:50 +0000 (21:50 +0000)
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.

configure
configure.in

index c673b3ee02563bf76fb41966d9707e44dcb30cd9..882c5d68fe36c41848af4fbde6ff0458e6d07d1a 100755 (executable)
--- a/configure
+++ b/configure
@@ -2633,6 +2633,52 @@ cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
 #include "confdefs.h"
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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
+cat conftest.$ac_ext >&5
+CFLAGS="$pgac_save_CFLAGS"
+                    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f 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
+#line $LINENO "configure"
+#include "confdefs.h"
+
 #ifdef F77_DUMMY_MAIN
 #  ifdef __cplusplus
      extern "C"
index 9ad04fbdb1e658431d6aa46dc74427dd7bd2cba7..6b046765053155ee8cbb4e6965b5486cf22e8a6f 100644 (file)
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.398.4.23 2008/02/24 05:22:33 tgl Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.398.4.24 2008/03/10 21:50:50 tgl Exp $
 dnl
 dnl Developers, please strive to achieve this order:
 dnl
@@ -278,6 +278,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])