summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2014-06-12 17:54:48 +0200
committerDavid Herrmann <dh.herrmann@gmail.com>2014-06-16 15:22:46 +0200
commitd442e2ec6e896c312bc616be7607332d978a45c9 (patch)
tree59834ed3d5d96f9be1bc5314a05a7821cf145de5 /src
parent2e78fa79bbaebb358d2657c397180d2d08d69b12 (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/shared/macro.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/shared/macro.h b/src/shared/macro.h
index 53bd578d7e..32cf714857 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")