Use a more bulletproof test for whether finite() and isinf() are present.

It seems that recent gcc versions can optimize away calls to these functions
even when the functions do not exist on the platform, resulting in a bogus
positive result.  Avoid this by using a non-constant argument and ensuring
that the function result is not simply discarded.  Per report from
François Laupretre.
This commit is contained in:
Tom Lane 2006-01-12 19:23:22 +00:00
parent 9484e14c5c
commit db0558c113
2 changed files with 18 additions and 10 deletions

10
configure vendored
View File

@ -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;
}

View File

@ -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)])