summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2011-12-14 17:14:21 -0500
committerAndrew Dunstan <andrew@dunslane.net>2011-12-14 17:14:21 -0500
commit24b96804d588da262ae0d3958e14638de217445a (patch)
tree25de314ffcae49e0db8f31770f79d5aaab90ca48
parent6cf639dfbddbc44d027730ad1504886312bc905a (diff)
Disable excessive FP optimization by recent versions of gcc.
Suggested solution from Tom Lane. Problem discovered, probably not for the first time, while testing the mingw-w64 32 bit compiler. Backpatched to all live branches.
-rwxr-xr-xconfigure61
-rw-r--r--configure.in2
2 files changed, 63 insertions, 0 deletions
diff --git a/configure b/configure
index d9566d7b07d..56179c19ffc 100755
--- a/configure
+++ b/configure
@@ -4306,6 +4306,67 @@ if test x"$pgac_cv_prog_cc_cflags__fwrapv" = x"yes"; then
CFLAGS="$CFLAGS -fwrapv"
fi
+ # Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -fexcess-precision=standard" >&5
+$as_echo_n "checking whether $CC supports -fexcess-precision=standard... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__fexcess_precision_standard+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS -fexcess-precision=standard"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ pgac_cv_prog_cc_cflags__fexcess_precision_standard=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ pgac_cv_prog_cc_cflags__fexcess_precision_standard=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_c_werror_flag=$ac_save_c_werror_flag
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_prog_cc_cflags__fexcess_precision_standard" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__fexcess_precision_standard" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__fexcess_precision_standard" = x"yes"; then
+ CFLAGS="$CFLAGS -fexcess-precision=standard"
+fi
+
elif test "$ICC" = yes; then
# Intel's compiler has a bug/misoptimization in checking for
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.
diff --git a/configure.in b/configure.in
index c011a4c6391..d3fe761fcb8 100644
--- a/configure.in
+++ b/configure.in
@@ -436,6 +436,8 @@ if test "$GCC" = yes -a "$ICC" = no; then
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])
+ # Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+
+ PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard])
elif test "$ICC" = yes; then
# Intel's compiler has a bug/misoptimization in checking for
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.