summaryrefslogtreecommitdiff
path: root/src/shared/macro.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-02-20 18:05:56 +0100
committerLennart Poettering <lennart@poettering.net>2014-02-20 18:07:01 +0100
commit7ebe131a9f37fe5a3a15f69962d21cb7e063dff8 (patch)
treefe05e3fc945aea6050dbb2f2862f041e51f4d049 /src/shared/macro.h
parent748db5928c573fd699cd88f32fe21a456fa46d3e (diff)
util: get rid of warnings around assert_cc() macro
Suggested by Holger Schurig.
Diffstat (limited to 'src/shared/macro.h')
-rw-r--r--src/shared/macro.h23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/shared/macro.h b/src/shared/macro.h
index dfbc20142f..959a9f7fb1 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -46,6 +46,14 @@
#define _alignas_(x) __attribute__((aligned(__alignof(x))))
#define _cleanup_(x) __attribute__((cleanup(x)))
+/* Temporarily disable some warnings */
+#define DISABLE_WARNING_DECLARATION_AFTER_STATEMENT \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wdeclaration-after-statement\"")
+
+#define REENABLE_WARNING \
+ _Pragma("GCC diagnostic pop")
+
/* automake test harness */
#define EXIT_TEST_SKIP 77
@@ -154,9 +162,20 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
} while (false)
#if defined(static_assert)
-#define assert_cc(expr) static_assert(expr, #expr)
+/* static_assert() is sometimes defined in a way that trips up
+ * -Wdeclaration-after-statement, hence let's temporarily turn off
+ * this warning around it. */
+#define assert_cc(expr) \
+ DISABLE_WARNING_DECLARATION_AFTER_STATEMENT; \
+ static_assert(expr, #expr); \
+ REENABLE_WARNING
#else
-#define assert_cc(expr) struct UNIQUE(_assert_struct_) { char x[(expr) ? 0 : -1]; };
+#define assert_cc(expr) \
+ DISABLE_WARNING_DECLARATION_AFTER_STATEMENT; \
+ struct UNIQUE(_assert_struct_) { \
+ char x[(expr) ? 0 : -1]; \
+ }; \
+ REENABLE_WARNING
#endif
#define assert_return(expr, r) \