diff options
author | Alexey Kopytov <Alexey.Kopytov@sun.com> | 2009-03-25 16:20:38 +0300 |
---|---|---|
committer | Alexey Kopytov <Alexey.Kopytov@sun.com> | 2009-03-25 16:20:38 +0300 |
commit | b9965ca6168ac53fb1f2960b1296be8fedd35ac4 (patch) | |
tree | d14b8c466a28465d48948a129a81004df00d5a3d | |
parent | a6975c5febf4adc582a9fbc7ca0ab51b1fff99af (diff) | |
parent | c4eba1edc174262cd76fdfed84b1a1bdb5b35df0 (diff) | |
download | mariadb-git-b9965ca6168ac53fb1f2960b1296be8fedd35ac4.tar.gz |
Automerge
-rw-r--r-- | configure.in | 21 | ||||
-rw-r--r-- | include/my_global.h | 16 |
2 files changed, 34 insertions, 3 deletions
diff --git a/configure.in b/configure.in index d86218bd782..ca8c0dc09b4 100644 --- a/configure.in +++ b/configure.in @@ -2085,6 +2085,27 @@ esac AC_MSG_CHECKING(for isinf in <math.h>) AC_TRY_LINK([#include <math.h>], [float f = 0.0; int r = isinf(f); return r], AC_MSG_RESULT(yes) + AC_MSG_CHECKING(whether isinf() is safe to use in C code) + AC_TRY_RUN([ +#include <math.h> +int main() +{ + double a= 10.0; + double b= 1e308; + + return !isinf(a * b); +} +], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_DEFINE([HAVE_BROKEN_ISINF], [1], + [Define to 1 if isinf() uses 80-bit register for intermediate values]) + ], + [ +# Let's be optimistic when cross-compiling, since the only compiler known +# to be affected by this isinf() bug is GCC 4.3 on 32-bit x86. + AC_MSG_RESULT([[cross-compiling, assuming 'yes']]) + ]) AC_MSG_CHECKING(whether isinf() can be used in C++ code) AC_LANG_SAVE AC_LANG_CPLUSPLUS diff --git a/include/my_global.h b/include/my_global.h index ad86aeb749f..803315e3dcd 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -905,10 +905,20 @@ typedef SOCKET_SIZE_TYPE size_socket; #endif #ifdef HAVE_ISINF -/* isinf() can be used in both C and C++ code */ -#define my_isinf(X) isinf(X) +/* Check if C compiler is affected by GCC bug #39228 */ +#if !defined(__cplusplus) && defined(HAVE_BROKEN_ISINF) +/* Force store/reload of the argument to/from a 64-bit double */ +static inline double my_isinf(double x) +{ + volatile double t= x; + return isinf(t); +} #else -#define my_isinf(X) (!isfinite(X) && !isnan(X)) +/* System-provided isinf() is available and safe to use */ +#define my_isinf(X) isinf(X) +#endif +#else /* !HAVE_ISINF */ +#define my_isinf(X) (!finite(X) && !isnan(X)) #endif /* Define missing math constants. */ |