From da27d897784665fcea8be943c78e840e68323dbe Mon Sep 17 00:00:00 2001
From: Rob Browning <rlb@defaultvalue.org>
Date: Sat, 5 Oct 2024 17:18:06 -0500
Subject: Compile with -fexcess-precision=standard for i[3456]86 when we can

* configure.ac: when -fexcess-precision=standard is available and we're
building for i[3456]86, use it.  This fixes floating point precision
problems caused by x87 (80-bit) floating point, and detected by
numbers.test.

Closes: 43262

Origin: upstream, commit 9b1effb58579821ffa9357df808d5264e45fb30c
---
 configure.ac | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/configure.ac b/configure.ac
index dc915ebaf..32cf48940 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,6 +61,30 @@ AC_PROG_INSTALL
 AC_PROG_CC
 gl_EARLY
 
+AC_MSG_CHECKING([whether the compiler supports -fexcess-precision=standard])
+old_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fexcess-precision=standard"
+fexcess_precision=''
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo;], [])], [fexcess_precision=1]])
+CFLAGS="$old_CFLAGS"
+if test -n "$fexcess_precision"; then
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+AC_MSG_CHECKING([whether we want -fexcess-precision=standard for $target_cpu])
+case "$target_cpu" in
+    i[[3456]]86)
+        AC_MSG_RESULT([yes])
+        if test -n "$fexcess_precision"; then
+          CFLAGS="$CFLAGS -fexcess-precision=standard"
+        else
+          AC_MSG_WARN([floating-point precision may exceed C99 rules])
+        fi
+        ;;
+    *) AC_MSG_RESULT([no]) ;;
+esac
+
 AC_MSG_CHECKING([whether the compiler supports -flto])
 old_CFLAGS="$CFLAGS"
 LTO_CFLAGS="-flto"