chiark / gitweb /
macro: fix assert_cc() fallback
[elogind.git] / src / shared / macro.h
index 9e94495dd6f5760c884c3bd345bf9fa3fe181630..aadb1959c033247594d97a71df182145cb161bba 100644 (file)
@@ -143,24 +143,16 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
         } while (false)
 
 #if defined(static_assert)
-#define assert_cc(expr)                         \
-        do {                                    \
-                static_assert(expr, #expr);     \
-        } while (false)
+#define assert_cc(expr) static_assert(expr, #expr)
 #else
-#define assert_cc(expr)                         \
-        do {                                    \
-                switch (0) {                    \
-                case 0:                         \
-                case !!(expr):                  \
-                        ;                       \
-                }                               \
-        } while (false)
+#define assert___cc(expr, line) struct _assert_struct_ ## line { char x[(expr) ? 0 : -1]; }
+#define assert__cc(expr, line) assert___cc((expr), line)
+#define assert_cc(expr) assert__cc((expr), __LINE__)
 #endif
 
 #define assert_return(expr, r)                    \
         do {                                      \
-                if (!(expr))                      \
+                if (_unlikely_(!(expr)))          \
                         return (r);               \
         } while (false)