From d442e2ec6e896c312bc616be7607332d978a45c9 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Thu, 12 Jun 2014 17:54:48 +0200 Subject: [PATCH] macro: add DISABLE_WARNING_SHADOW As it turns out, we cannot use _Pragma in compound-statements. Therefore, constructs like MIN(MAX(a, b), x) will warn due to shadowed variable declarations. The DISABLE_WARNING_SHADOW macro can be used to suppress these. Note that using UNIQUE(_var) does not work either as GCC uses the last line of a macro-expansion for __LINE__, therefore, still causing both macros to have the same variables. We could use different variable-names for MIN and MAX, but that just hides the problem and still fails for MIN(something(MIN(a, b)), c). The only working solution is to use __COUNTER__ and pass it pre-evaluated as extra argument to a macro to use as name-prefix. This, however, makes all these macros much more complicated so I'll go with manual DISABLE_WARNING_SHADOW so far. --- src/shared/macro.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shared/macro.h b/src/shared/macro.h index 53bd578d7..32cf71485 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -63,6 +63,10 @@ _Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic ignored \"-Wnonnull\"") +#define DISABLE_WARNING_SHADOW \ + _Pragma("GCC diagnostic push"); \ + _Pragma("GCC diagnostic ignored \"-Wshadow\"") + #define REENABLE_WARNING \ _Pragma("GCC diagnostic pop") -- 2.30.2