Add VERIFY0P() and ASSERT0P() macros.
These macros are similar to VERIFY0() and ASSERT0() but are intended for pointers, and therefore use uintptr_t instead of int64_t. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Kay Pedersen <mail@mkwg.de> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Dag-Erling Smørgrav <des@FreeBSD.org> Closes #15225
This commit is contained in:
parent
01d9283af3
commit
506fe78c48
|
@ -39,12 +39,14 @@
|
||||||
* ASSERT3U() - Assert unsigned X OP Y is true, if not panic.
|
* ASSERT3U() - Assert unsigned X OP Y is true, if not panic.
|
||||||
* ASSERT3P() - Assert pointer X OP Y is true, if not panic.
|
* ASSERT3P() - Assert pointer X OP Y is true, if not panic.
|
||||||
* ASSERT0() - Assert value is zero, if not panic.
|
* ASSERT0() - Assert value is zero, if not panic.
|
||||||
|
* ASSERT0P() - Assert pointer is null, if not panic.
|
||||||
* VERIFY() - Verify X is true, if not panic.
|
* VERIFY() - Verify X is true, if not panic.
|
||||||
* VERIFY3B() - Verify boolean X OP Y is true, if not panic.
|
* VERIFY3B() - Verify boolean X OP Y is true, if not panic.
|
||||||
* VERIFY3S() - Verify signed X OP Y is true, if not panic.
|
* VERIFY3S() - Verify signed X OP Y is true, if not panic.
|
||||||
* VERIFY3U() - Verify unsigned X OP Y is true, if not panic.
|
* VERIFY3U() - Verify unsigned X OP Y is true, if not panic.
|
||||||
* VERIFY3P() - Verify pointer X OP Y is true, if not panic.
|
* VERIFY3P() - Verify pointer X OP Y is true, if not panic.
|
||||||
* VERIFY0() - Verify value is zero, if not panic.
|
* VERIFY0() - Verify value is zero, if not panic.
|
||||||
|
* VERIFY0P() - Verify pointer is null, if not panic.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SPL_DEBUG_H
|
#ifndef _SPL_DEBUG_H
|
||||||
|
@ -135,6 +137,15 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
(long long)_verify0_right); \
|
(long long)_verify0_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define VERIFY0P(RIGHT) do { \
|
||||||
|
const uintptr_t _verify0_right = (uintptr_t)(RIGHT); \
|
||||||
|
if (unlikely(!(0 == _verify0_right))) \
|
||||||
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
"VERIFY0P(" #RIGHT ") " \
|
||||||
|
"failed (NULL == %p)\n", \
|
||||||
|
(void *)_verify0_right); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Debugging disabled (--disable-debug)
|
* Debugging disabled (--disable-debug)
|
||||||
*/
|
*/
|
||||||
|
@ -150,6 +161,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
#define ASSERT3P(x, y, z) \
|
#define ASSERT3P(x, y, z) \
|
||||||
((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
|
((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
|
||||||
#define ASSERT0(x) ((void) sizeof ((uintptr_t)(x)))
|
#define ASSERT0(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
|
#define ASSERT0P(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
#define IMPLY(A, B) \
|
#define IMPLY(A, B) \
|
||||||
((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B)))
|
((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B)))
|
||||||
#define EQUIV(A, B) \
|
#define EQUIV(A, B) \
|
||||||
|
@ -165,6 +177,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
#define ASSERT3U VERIFY3U
|
#define ASSERT3U VERIFY3U
|
||||||
#define ASSERT3P VERIFY3P
|
#define ASSERT3P VERIFY3P
|
||||||
#define ASSERT0 VERIFY0
|
#define ASSERT0 VERIFY0
|
||||||
|
#define ASSERT0P VERIFY0P
|
||||||
#define ASSERT VERIFY
|
#define ASSERT VERIFY
|
||||||
#define IMPLY(A, B) \
|
#define IMPLY(A, B) \
|
||||||
((void)(likely((!(A)) || (B)) || \
|
((void)(likely((!(A)) || (B)) || \
|
||||||
|
|
|
@ -34,12 +34,14 @@
|
||||||
* ASSERT3U() - Assert unsigned X OP Y is true, if not panic.
|
* ASSERT3U() - Assert unsigned X OP Y is true, if not panic.
|
||||||
* ASSERT3P() - Assert pointer X OP Y is true, if not panic.
|
* ASSERT3P() - Assert pointer X OP Y is true, if not panic.
|
||||||
* ASSERT0() - Assert value is zero, if not panic.
|
* ASSERT0() - Assert value is zero, if not panic.
|
||||||
|
* ASSERT0P() - Assert pointer is null, if not panic.
|
||||||
* VERIFY() - Verify X is true, if not panic.
|
* VERIFY() - Verify X is true, if not panic.
|
||||||
* VERIFY3B() - Verify boolean X OP Y is true, if not panic.
|
* VERIFY3B() - Verify boolean X OP Y is true, if not panic.
|
||||||
* VERIFY3S() - Verify signed X OP Y is true, if not panic.
|
* VERIFY3S() - Verify signed X OP Y is true, if not panic.
|
||||||
* VERIFY3U() - Verify unsigned X OP Y is true, if not panic.
|
* VERIFY3U() - Verify unsigned X OP Y is true, if not panic.
|
||||||
* VERIFY3P() - Verify pointer X OP Y is true, if not panic.
|
* VERIFY3P() - Verify pointer X OP Y is true, if not panic.
|
||||||
* VERIFY0() - Verify value is zero, if not panic.
|
* VERIFY0() - Verify value is zero, if not panic.
|
||||||
|
* VERIFY0P() - Verify pointer is null, if not panic.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SPL_DEBUG_H
|
#ifndef _SPL_DEBUG_H
|
||||||
|
@ -139,6 +141,15 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
(long long)_verify0_right); \
|
(long long)_verify0_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define VERIFY0P(RIGHT) do { \
|
||||||
|
const uintptr_t _verify0_right = (uintptr_t)(RIGHT); \
|
||||||
|
if (unlikely(!(0 == _verify0_right))) \
|
||||||
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
"VERIFY0P(" #RIGHT ") " \
|
||||||
|
"failed (NULL == %px)\n", \
|
||||||
|
(void *)_verify0_right); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY_IMPLY(A, B) \
|
#define VERIFY_IMPLY(A, B) \
|
||||||
((void)(likely((!(A)) || (B)) || \
|
((void)(likely((!(A)) || (B)) || \
|
||||||
spl_assert("(" #A ") implies (" #B ")", \
|
spl_assert("(" #A ") implies (" #B ")", \
|
||||||
|
@ -164,6 +175,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
#define ASSERT3P(x, y, z) \
|
#define ASSERT3P(x, y, z) \
|
||||||
((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
|
((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
|
||||||
#define ASSERT0(x) ((void) sizeof ((uintptr_t)(x)))
|
#define ASSERT0(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
|
#define ASSERT0P(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
#define IMPLY(A, B) \
|
#define IMPLY(A, B) \
|
||||||
((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B)))
|
((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B)))
|
||||||
#define EQUIV(A, B) \
|
#define EQUIV(A, B) \
|
||||||
|
@ -179,6 +191,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
#define ASSERT3U VERIFY3U
|
#define ASSERT3U VERIFY3U
|
||||||
#define ASSERT3P VERIFY3P
|
#define ASSERT3P VERIFY3P
|
||||||
#define ASSERT0 VERIFY0
|
#define ASSERT0 VERIFY0
|
||||||
|
#define ASSERT0P VERIFY0P
|
||||||
#define ASSERT VERIFY
|
#define ASSERT VERIFY
|
||||||
#define IMPLY VERIFY_IMPLY
|
#define IMPLY VERIFY_IMPLY
|
||||||
#define EQUIV VERIFY_EQUIV
|
#define EQUIV VERIFY_EQUIV
|
||||||
|
|
|
@ -120,6 +120,15 @@ do { \
|
||||||
(u_longlong_t)__left); \
|
(u_longlong_t)__left); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define VERIFY0P(LEFT) \
|
||||||
|
do { \
|
||||||
|
const uintptr_t __left = (uintptr_t)(LEFT); \
|
||||||
|
if (!(__left == 0)) \
|
||||||
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
"%s == 0 (%p == 0)", #LEFT, \
|
||||||
|
(void *)__left); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#ifdef assert
|
#ifdef assert
|
||||||
#undef assert
|
#undef assert
|
||||||
#endif
|
#endif
|
||||||
|
@ -134,6 +143,7 @@ do { \
|
||||||
#define ASSERT3P(x, y, z) \
|
#define ASSERT3P(x, y, z) \
|
||||||
((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
|
((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
|
||||||
#define ASSERT0(x) ((void) sizeof ((uintptr_t)(x)))
|
#define ASSERT0(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
|
#define ASSERT0P(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
#define ASSERT(x) ((void) sizeof ((uintptr_t)(x)))
|
#define ASSERT(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
#define assert(x) ((void) sizeof ((uintptr_t)(x)))
|
#define assert(x) ((void) sizeof ((uintptr_t)(x)))
|
||||||
#define IMPLY(A, B) \
|
#define IMPLY(A, B) \
|
||||||
|
@ -146,6 +156,7 @@ do { \
|
||||||
#define ASSERT3U VERIFY3U
|
#define ASSERT3U VERIFY3U
|
||||||
#define ASSERT3P VERIFY3P
|
#define ASSERT3P VERIFY3P
|
||||||
#define ASSERT0 VERIFY0
|
#define ASSERT0 VERIFY0
|
||||||
|
#define ASSERT0P VERIFY0P
|
||||||
#define ASSERT VERIFY
|
#define ASSERT VERIFY
|
||||||
#define assert VERIFY
|
#define assert VERIFY
|
||||||
#define IMPLY(A, B) \
|
#define IMPLY(A, B) \
|
||||||
|
|
Loading…
Reference in New Issue