util: Predicate the fpclassify fallback on !defined(__cplusplus)
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 28 Jan 2015 18:38:01 +0000 (10:38 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 28 Jan 2015 19:47:56 +0000 (11:47 -0800)
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>
src/util/macros.h

index 180f2f6436bafaee9544c52577348377a1b62386..74bd8bfad88fd0d299c39514b4c5f4eea04d33fd 100644 (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 */