From 6c48cd8ac223eb00cb4dadebcbe4ce1dfdfc6b76 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Sat, 2 Nov 2013 00:14:05 +0800 Subject: [PATCH] This patch add a CTASSERT macro for compile time assertion. This macro makes the compile to spit "mixed definition and code" warning, I can't find a way to avoid it. This patch lays some groundwork for the persistent l2arc feature. See https://www.illumos.org/issues/3525. Signed-off-by: Yuxuan Shui Signed-off-by: Brian Behlendorf Closes #303 --- include/sys/debug.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/sys/debug.h b/include/sys/debug.h index f3f3529a9..9fa2653d4 100644 --- a/include/sys/debug.h +++ b/include/sys/debug.h @@ -145,4 +145,15 @@ do { \ #define VERIFY(x) ASSERT(x) #endif /* NDEBUG */ + +/* + * Compile-time assertion. The condition 'x' must be constant. + */ +#define CTASSERT_GLOBAL(x) _CTASSERT(x, __LINE__) +#define CTASSERT(x) { _CTASSERT(x, __LINE__); } +#define _CTASSERT(x, y) __CTASSERT(x, y) +#define __CTASSERT(x, y) \ + typedef char __attribute__ ((unused)) \ + __compile_time_assertion__ ## y[(x) ? 1 : -1] + #endif /* SPL_DEBUG_H */