From fca1934c88f1238a43d0bea5b06cea4fd15e7b93 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 13 Jul 2017 17:42:04 -0400 Subject: [PATCH] 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. --- changes/bug22915 | 3 +++ src/common/util.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 changes/bug22915 diff --git a/changes/bug22915 b/changes/bug22915 new file mode 100644 index 000000000..17a9c6018 --- /dev/null +++ b/changes/bug22915 @@ -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. diff --git a/src/common/util.c b/src/common/util.c index 9e61eb771..d2cbacde3 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -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