From 644294df60b45cb9ac150cff8ffe49c119cdb349 Mon Sep 17 00:00:00 2001 From: "Jayesh Badwaik (FZ Juelich)" Date: Wed, 8 Feb 2023 12:40:55 +0100 Subject: [PATCH] Suppress declared_but_not_referenced warning for NVHPC Catch2 suppresses unused variable and equivalent warnings in a couple of places, but most importantly, in the declaration of autoRegistrar in test registry. This warning gets triggered by NVHPC compiler. The current patch adds three macros, namely: CATCH_INTERNAL_START_WARNINGS_SUPPRESSION CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION for the NVHPC Compiler which in particular prevents that warning from occurring. The compiler is detected completely separately from the other compilers in this patch, because from what I found out, NVHPC defines __GNUC__ as well for some reason. (I suspect because it advertises itself as GNU compatible.) We also add a condition to make sure that the `__GNUC__` path is not taken by the NVHPC compiler. --- src/catch2/internal/catch_compiler_capabilities.hpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/catch2/internal/catch_compiler_capabilities.hpp b/src/catch2/internal/catch_compiler_capabilities.hpp index 76c5696b..42631a5f 100644 --- a/src/catch2/internal/catch_compiler_capabilities.hpp +++ b/src/catch2/internal/catch_compiler_capabilities.hpp @@ -41,7 +41,7 @@ // Only GCC compiler should be used in this block, so other compilers trying to // mask themselves as GCC should be ignored. -#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) +#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) && !defined(__NVCOMPILER) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) @@ -60,6 +60,12 @@ #endif +#if defined(__NVCOMPILER) +# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "diag push" ) +# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "diag pop" ) +# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS _Pragma( "diag_suppress declared_but_not_referenced" ) +#endif + #if defined(__CUDACC__) && !defined(__clang__) # ifdef __NVCC_DIAG_PRAGMA_SUPPORT__ // New pragmas introduced in CUDA 11.5+