Suppress clang4-specific -Wdouble-promotion warnings

Wow, it sure seems like some compilers can't implement isnan() and
friends in a way that pleases themselves!

Fixes bug 22915. Bug trigged by 0.2.8.1-alpha and later; caused by
clang 4.
This commit is contained in:
Nick Mathewson 2017-07-13 17:42:04 -04:00
parent ed0fb21834
commit fca1934c88
2 changed files with 19 additions and 0 deletions

3
changes/bug22915 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (compilation warnings):
- Suppress -Wdouble-promotion warnings with clang 4.0. Fixes bug 22915;
bugfix on 0.2.8.1-alpha.

View File

@ -5705,6 +5705,18 @@ clamp_double_to_int64(double number)
#define PROBLEMATIC_FLOAT_CONVERSION_WARNING
DISABLE_GCC_WARNING(float-conversion)
#endif
/*
With clang 4.0 we apparently run into "double promotion" warnings here,
since clang thinks we're promoting a double to a long double.
*/
#if defined(__clang__)
#if __has_warning("-Wdouble-promotion")
#define PROBLEMATIC_DOUBLE_PROMOTION_WARNING
DISABLE_GCC_WARNING(double-promotion)
#endif
#endif
/* NaN is a special case that can't be used with the logic below. */
if (isnan(number)) {
return 0;
@ -5730,6 +5742,10 @@ DISABLE_GCC_WARNING(float-conversion)
/* Handle infinities and finite numbers with magnitude >= 2^63. */
return signbit(number) ? INT64_MIN : INT64_MAX;
#ifdef PROBLEMATIC_DOUBLE_PROMOTION_WARNING
ENABLE_GCC_WARNING(double-promotion)
#endif
#ifdef PROBLEMATIC_FLOAT_CONVERSION_WARNING
ENABLE_GCC_WARNING(float-conversion)
#endif