On Thu, 20.02.14 14:38, Holger Schurig (holgerschu...@gmail.com) wrote:
Make macro assert_cc() not emit declaration after statements warnings.
This can be done by using the GCC pragmas 'diagnostic ignore undefined'.
In order to be able to use that pragma inside a macro, we need to put it
into the (C99-introduced) _Pragma() pseudo-function.
Ah! Nice! I thought a couple of times about using #pragma for this
but always ran against the wall that #pragma cannot appear in
macros. Thanks for the pointer to _Pragma()! This is a great fix!
I have now commited a change inspired by your patch! Thanks a lot!
---
src/shared/macro.h |6 +-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/shared/macro.h b/src/shared/macro.h
index dfbc201..f93a4f0 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -156,7 +156,11 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
#if defined(static_assert)
#define assert_cc(expr) static_assert(expr, #expr)
#else
-#define assert_cc(expr) struct UNIQUE(_assert_struct_) { char x[(expr) ? 0 :
-1]; };
+#define assert_cc(expr) \
+ _Pragma(GCC diagnostic push); \
+ _Pragma(GCC diagnostic ignored \-Wdeclaration-after-statement\); \
+ struct UNIQUE(_assert_struct_) { char x[(expr) ? 0 : -1]; }; \
+ _Pragma(GCC diagnostic pop);
#endif
#define assert_return(expr, r) \
Lennart
--
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel