From d1130c9d395d57b035b8738f6e993ca9c9ff8621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= Date: Mon, 1 Aug 2022 14:00:14 +0200 Subject: [PATCH] Suppress float-equal warning --- src/core/include/units/bits/constexpr_math.h | 4 ++++ src/core/include/units/bits/external/hacks.h | 2 ++ src/core/include/units/magnitude.h | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/core/include/units/bits/constexpr_math.h b/src/core/include/units/bits/constexpr_math.h index 1a3e719d..da7fc2cf 100644 --- a/src/core/include/units/bits/constexpr_math.h +++ b/src/core/include/units/bits/constexpr_math.h @@ -23,6 +23,7 @@ #pragma once #include +#include #include #include #include @@ -36,9 +37,12 @@ struct decimal_fp { [[nodiscard]] constexpr decimal_fp to_decimal(double v) noexcept { + UNITS_DIAGNOSTIC_PUSH + UNITS_DIAGNOSTIC_IGNORE_FLOAT_EQUAL if (v == 0) { return {.significant = 0.0, .exponent = 0}; } + UNITS_DIAGNOSTIC_POP double significant = abs(v); std::intmax_t exponent = 0; diff --git a/src/core/include/units/bits/external/hacks.h b/src/core/include/units/bits/external/hacks.h index e08faec9..8d142727 100644 --- a/src/core/include/units/bits/external/hacks.h +++ b/src/core/include/units/bits/external/hacks.h @@ -45,6 +45,7 @@ UNITS_PRAGMA(GCC diagnostic ignored "-Wunknown-warning-option") \ UNITS_PRAGMA(GCC diagnostic ignored X) #define UNITS_DIAGNOSTIC_IGNORE_EXPR_ALWAYS_TF +#define UNITS_DIAGNOSTIC_IGNORE_FLOAT_EQUAL UNITS_DIAGNOSTIC_IGNORE("-Wfloat-equal") #define UNITS_DIAGNOSTIC_IGNORE_LOSS_OF_DATA #define UNITS_DIAGNOSTIC_IGNORE_MISSING_BRACES UNITS_DIAGNOSTIC_IGNORE("-Wmissing-braces") #define UNITS_DIAGNOSTIC_IGNORE_NON_TEMPLATE_FRIEND UNITS_DIAGNOSTIC_IGNORE("-Wnon-template-friend") @@ -56,6 +57,7 @@ #define UNITS_DIAGNOSTIC_IGNORE_PRAGMAS UNITS_PRAGMA(warning(disable : 4068)) #define UNITS_DIAGNOSTIC_IGNORE(X) UNITS_DIAGNOSTIC_IGNORE_PRAGMAS UNITS_PRAGMA(warning(disable : X)) #define UNITS_DIAGNOSTIC_IGNORE_EXPR_ALWAYS_TF UNITS_DIAGNOSTIC_IGNORE(4296) +#define UNITS_DIAGNOSTIC_IGNORE_FLOAT_EQUAL #define UNITS_DIAGNOSTIC_IGNORE_LOSS_OF_DATA UNITS_DIAGNOSTIC_IGNORE(4244) #define UNITS_DIAGNOSTIC_IGNORE_MISSING_BRACES #define UNITS_DIAGNOSTIC_IGNORE_NON_TEMPLATE_FRIEND diff --git a/src/core/include/units/magnitude.h b/src/core/include/units/magnitude.h index c81fb538..a4de36d9 100644 --- a/src/core/include/units/magnitude.h +++ b/src/core/include/units/magnitude.h @@ -155,9 +155,12 @@ constexpr T int_power(T base, std::integral auto exp) constexpr auto checked_multiply = [](auto a, auto b) { const auto result = a * b; + UNITS_DIAGNOSTIC_PUSH + UNITS_DIAGNOSTIC_IGNORE_FLOAT_EQUAL if (result / a != b) { throw std::overflow_error{"Wraparound detected"}; } + UNITS_DIAGNOSTIC_POP return result; };