util: Predicate the fpclassify fallback on !defined(__cplusplus)

The problem is that the fallbacks we have at the moment don't work in C++.
While we could theoretically fix the fallbacks it would also raise the
issue of correctly detecting the fpclassify function.  So, for now, we'll
just disable it until we actually have a C++ user.

Reported-by: Tom Stellard <thomas.stellard@amd.com>
Tested-by: Tom Stellard <thomas.stellard@amd.com>
Tested-by: EdB <edb+mesa@sigluy.net>
This commit is contained in:
Jason Ekstrand 2015-01-28 10:38:01 -08:00
parent 3b7747c022
commit 58e8468d11
1 changed files with 12 additions and 2 deletions

View File

@ -158,7 +158,15 @@ do { \
# endif
#endif
#if defined(fpclassify)
/* The fallbacks below don't work correctly in C++ and properly detecting
* FP_NORMAL in C++ is hard. Since we don't use fpclassify in any C++ code
* at the moment, we can just predicate this whole thing by not being in
* C++ and we shoudld be ok. If we ever want to use fpclassify in a C++
* file, we will have to revisit this.
*/
#ifndef __cplusplus
#ifdef FP_NORMAL
/* ISO C99 says that fpclassify is a macro. Assume that any implementation
* of fpclassify, whether it's in a C99 compiler or not, will be a macro.
*/
@ -199,7 +207,7 @@ fpclassify(double x)
#else
enum {FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL}
static inline enum {FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL}
fpclassify(double x)
{
/* XXX do something better someday */
@ -208,4 +216,6 @@ fpclassify(double x)
#endif
#endif /* __cplusplus */
#endif /* UTIL_MACROS_H */