From: David Herrmann Date: Thu, 12 Jun 2014 15:54:48 +0000 (+0200) Subject: macro: add DISABLE_WARNING_SHADOW X-Git-Tag: v215~412 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=d442e2ec6e896c312bc616be7607332d978a45c9 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. --- 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")