diff options
author | Joerg Sonnenberger <joerg@bec.de> | 2013-03-25 13:13:33 +0000 |
---|---|---|
committer | Joerg Sonnenberger <joerg@bec.de> | 2013-03-25 13:13:33 +0000 |
commit | f9a7132df8f8e0dd0f54fd603d358fc5a2285011 (patch) | |
tree | 7ca7902dd019b343ea5fe1c7aea9a140fb85b610 /include | |
parent | 1bb93a912199bda15214d1ee7f3c731b8e9b648d (diff) | |
download | external_llvm-f9a7132df8f8e0dd0f54fd603d358fc5a2285011.zip external_llvm-f9a7132df8f8e0dd0f54fd603d358fc5a2285011.tar.gz external_llvm-f9a7132df8f8e0dd0f54fd603d358fc5a2285011.tar.bz2 |
Refine fenv.h handling: check if the desired macros exist, before using
it. NetBSD/ARM and TILE-Gx are examples for platforms that have an
unusable fenv.h and this avoids the need for a blacklist.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177865 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Config/config.h.in | 8 | ||||
-rw-r--r-- | include/llvm/Support/FEnv.h | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/include/llvm/Config/config.h.in b/include/llvm/Config/config.h.in index 2f9e6ff..5a3d02c 100644 --- a/include/llvm/Config/config.h.in +++ b/include/llvm/Config/config.h.in @@ -78,6 +78,14 @@ /* Define to 1 if you have the <ctype.h> header file. */ #undef HAVE_CTYPE_H +/* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you + don't. */ +#undef HAVE_DECL_FE_ALL_EXCEPT + +/* Define to 1 if you have the declaration of `FE_INEXACT', and to 0 if you + don't. */ +#undef HAVE_DECL_FE_INEXACT + /* Define to 1 if you have the declaration of `strerror_s', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_S diff --git a/include/llvm/Support/FEnv.h b/include/llvm/Support/FEnv.h index d9cf724..8560ee0 100644 --- a/include/llvm/Support/FEnv.h +++ b/include/llvm/Support/FEnv.h @@ -32,7 +32,7 @@ namespace sys { /// llvm_fenv_clearexcept - Clear the floating-point exception state. static inline void llvm_fenv_clearexcept() { -#ifdef HAVE_FENV_H +#if defined(HAVE_FENV_H) && HAVE_DECL_FE_ALL_EXCEPT feclearexcept(FE_ALL_EXCEPT); #endif errno = 0; @@ -43,7 +43,7 @@ static inline bool llvm_fenv_testexcept() { int errno_val = errno; if (errno_val == ERANGE || errno_val == EDOM) return true; -#ifdef HAVE_FENV_H +#if defined(HAVE_FENV_H) && HAVE_DECL_FE_ALL_EXCEPT && HAVE_DECL_FE_INEXACT if (fetestexcept(FE_ALL_EXCEPT & ~FE_INEXACT)) return true; #endif |