From db0558c11347ad27a032e6efed509a6e99b52e67 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 12 Jan 2006 19:23:22 +0000
Subject: [PATCH] =?UTF-8?q?Use=20a=20more=20bulletproof=20test=20for=20whe?=
 =?UTF-8?q?ther=20finite()=20and=20isinf()=20are=20present.=20It=20seems?=
 =?UTF-8?q?=20that=20recent=20gcc=20versions=20can=20optimize=20away=20cal?=
 =?UTF-8?q?ls=20to=20these=20functions=20even=20when=20the=20functions=20d?=
 =?UTF-8?q?o=20not=20exist=20on=20the=20platform,=20resulting=20in=20a=20b?=
 =?UTF-8?q?ogus=20positive=20result.=20=20Avoid=20this=20by=20using=20a=20?=
 =?UTF-8?q?non-constant=20argument=20and=20ensuring=20that=20the=20functio?=
 =?UTF-8?q?n=20result=20is=20not=20simply=20discarded.=20=20Per=20report?=
 =?UTF-8?q?=20from=20Fran=C3=A7ois=20Laupretre.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 configure    | 10 +++++++---
 configure.in | 18 +++++++++++-------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/configure b/configure
index acb4592d8db..0a676a3fd2e 100755
--- a/configure
+++ b/configure
@@ -14202,7 +14202,6 @@ fi
 
 
 
-# do this one the hard way in case isinf() is a macro
 echo "$as_me:$LINENO: checking for isinf" >&5
 echo $ECHO_N "checking for isinf... $ECHO_C" >&6
 if test "${ac_cv_func_isinf+set}" = set; then
@@ -14214,12 +14213,14 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+
 #include <math.h>
+double glob_double;
 
 int
 main ()
 {
-double x = 0.0; int res = isinf(x);
+return isinf(glob_double) ? 0 : 1;
   ;
   return 0;
 }
@@ -15102,11 +15103,14 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+
 #include <math.h>
+double glob_double;
+
 int
 main ()
 {
-int dummy=finite(1.0);
+return finite(glob_double) ? 0 : 1;
   ;
   return 0;
 }
diff --git a/configure.in b/configure.in
index 5f7acd1871f..9ede74a7b43 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.441 2006/01/05 03:01:32 momjian Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.442 2006/01/12 19:23:22 tgl Exp $
 dnl
 dnl Developers, please strive to achieve this order:
 dnl
@@ -892,12 +892,13 @@ fi
 AC_CHECK_DECLS([snprintf, vsnprintf])
 
 
-# do this one the hard way in case isinf() is a macro
+dnl Cannot use AC_CHECK_FUNC because isinf may be a macro
 AC_CACHE_CHECK([for isinf], ac_cv_func_isinf,
-[AC_TRY_LINK(
-[#include <math.h>
+[AC_TRY_LINK([
+#include <math.h>
+double glob_double;
 ],
-[double x = 0.0; int res = isinf(x);],
+[return isinf(glob_double) ? 0 : 1;],
 [ac_cv_func_isinf=yes],
 [ac_cv_func_isinf=no])])
 
@@ -963,8 +964,11 @@ fi
 
 dnl Cannot use AC_CHECK_FUNC because finite may be a macro
 AC_MSG_CHECKING(for finite)
-AC_TRY_LINK([#include <math.h>],
-            [int dummy=finite(1.0);],
+AC_TRY_LINK([
+#include <math.h>
+double glob_double;
+],
+            [return finite(glob_double) ? 0 : 1;],
             [AC_DEFINE(HAVE_FINITE, 1, [Define to 1 if you have finite().])
 AC_MSG_RESULT(yes)],
             [AC_MSG_RESULT(no)])
-- 
GitLab