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 <yshuiv7@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #303
This commit is contained in:
Yuxuan Shui 2013-11-02 00:14:05 +08:00 committed by Brian Behlendorf
parent acf0ade362
commit 6c48cd8ac2
1 changed files with 11 additions and 0 deletions

View File

@ -145,4 +145,15 @@ do { \
#define VERIFY(x) ASSERT(x) #define VERIFY(x) ASSERT(x)
#endif /* NDEBUG */ #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 */ #endif /* SPL_DEBUG_H */