From eafdd3eb81d77aacf9a641a693e2ee8e97864cbb Mon Sep 17 00:00:00 2001 From: Olli Lupton Date: Thu, 4 Nov 2021 15:46:36 +0100 Subject: [PATCH] Be more explicit. --- include/fmt/core.h | 17 ++++++++++++++++- include/fmt/format.h | 17 ++++++++--------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/include/fmt/core.h b/include/fmt/core.h index c41aa89e..6ffd6ddf 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -18,18 +18,33 @@ // The fmt library version in the form major * 10000 + minor * 100 + patch. #define FMT_VERSION 80001 +#if defined(__NVCOMPILER) +# define FMT_NVHPC_VERSION \ + (__NVCOMPILER_MAJOR__ * 10000 + __NVCOMPILER_MINOR__ * 100 + \ + __NVCOMPILER_PATCHLEVEL__) +#else +# define FMT_NVHPC_VERSION 0 +#endif + #if defined (__clang__ ) && !defined(__ibmxl__) # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) #else # define FMT_CLANG_VERSION 0 #endif -#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__NVCOMPILER) +#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) && \ + !defined(__NVCOMPILER) # define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) #else # define FMT_GCC_VERSION 0 #endif +#if FMT_NVHPC_VERSION > 0 +# define FMT_NVHPC_PRAGMA(arg) _Pragma(arg) +#else +# define FMT_NVHPC_PRAGMA(arg) +#endif + #ifndef FMT_GCC_PRAGMA // Workaround _Pragma bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59884. # if FMT_GCC_VERSION >= 504 diff --git a/include/fmt/format.h b/include/fmt/format.h index f6a283ad..6071c8db 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -967,17 +967,16 @@ FMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int { template FMT_CONSTEXPR auto count_digits(UInt n) -> int { #ifdef FMT_BUILTIN_CLZ - if (num_bits() == 32) { + if (num_bits() == 32) return (FMT_BUILTIN_CLZ(static_cast(n) | 1) ^ 31) / BITS + 1; - } else #endif - { - int num_digits = 0; - do { - ++num_digits; - } while ((n >>= BITS) != 0); - return num_digits; - } + FMT_NVHPC_PRAGMA("diag_suppress initialization_not_reachable") + int num_digits = 0; + FMT_NVHPC_PRAGMA("diag_default initialization_not_reachable") + do { + ++num_digits; + } while ((n >>= BITS) != 0); + return num_digits; } template <> auto count_digits<4>(detail::fallback_uintptr n) -> int;