Cleanup VERIFY() macros (#17163)

- Fix VERIFY3B() when given non-boolean values.
 - Map EQUIV() into VERIFY3B(,==,) as equivalent.
 - Tune messages for better readability and to closer match source
code for easier search.  Unify user-space messages with kernel.
 - Tune printed types and remove %px outside of Linux kernel.

Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
Sponsored by:	iXsystems, Inc.
Reviewed-by: @ImAwsumm
Reviewed-by: Rob Norris <robn@despairlabs.com>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
(cherry picked from commit 4866c2fabf)
This commit is contained in:
Alexander Motin
2025-04-16 12:01:32 -04:00
committed by Tony Hutter
parent 7fde3933fb
commit 243a46f28d
3 changed files with 89 additions and 114 deletions
+33 -32
View File
@@ -86,12 +86,13 @@ do { \
#define VERIFY3B(LEFT, OP, RIGHT) \
do { \
const boolean_t __left = (boolean_t)(LEFT); \
const boolean_t __right = (boolean_t)(RIGHT); \
const boolean_t __left = (boolean_t)!!(LEFT); \
const boolean_t __right = (boolean_t)!!(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
"VERIFY3B(%s, %s, %s) failed " \
"(%d %s %d)", #LEFT, #OP, #RIGHT, \
__left, #OP, __right); \
} while (0)
#define VERIFY3S(LEFT, OP, RIGHT) \
@@ -100,8 +101,9 @@ do { \
const int64_t __right = (int64_t)(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
"VERIFY3S(%s, %s, %s) failed " \
"(%lld %s 0x%lld)", #LEFT, #OP, #RIGHT, \
(longlong_t)__left, #OP, (longlong_t)__right); \
} while (0)
#define VERIFY3U(LEFT, OP, RIGHT) \
@@ -110,7 +112,8 @@ do { \
const uint64_t __right = (uint64_t)(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
"VERIFY3U(%s, %s, %s) failed " \
"(%llu %s %llu)", #LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
} while (0)
@@ -120,7 +123,8 @@ do { \
const uintptr_t __right = (uintptr_t)(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (%p %s %p)", #LEFT, #OP, #RIGHT, \
"VERIFY3P(%s, %s, %s) failed " \
"(%p %s %p)", #LEFT, #OP, #RIGHT, \
(void *)__left, #OP, (void *)__right); \
} while (0)
@@ -129,7 +133,7 @@ do { \
const uint64_t __left = (uint64_t)(LEFT); \
if (!(__left == 0)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s == 0 (0x%llx == 0)", #LEFT, \
"VERIFY0(%s) failed (%lld)", #LEFT, \
(u_longlong_t)__left); \
} while (0)
@@ -138,7 +142,7 @@ do { \
const uintptr_t __left = (uintptr_t)(LEFT); \
if (!(__left == 0)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s == 0 (%p == 0)", #LEFT, \
"VERIFY0P(%s) failed (%p)", #LEFT, \
(void *)__left); \
} while (0)
@@ -150,13 +154,13 @@ do { \
/* BEGIN CSTYLED */
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) \
do { \
const boolean_t __left = (boolean_t)(LEFT); \
const boolean_t __right = (boolean_t)(RIGHT); \
const boolean_t __left = (boolean_t)!!(LEFT); \
const boolean_t __right = (boolean_t)!!(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx) " STR, \
#LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
"VERIFY3B(%s, %s, %s) failed " \
"(%d %s %d) " STR, #LEFT, #OP, #RIGHT, \
__left, #OP, __right, \
__VA_ARGS__); \
} while (0)
@@ -166,9 +170,9 @@ do { \
const int64_t __right = (int64_t)(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx) " STR, \
#LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
"VERIFY3S(%s, %s, %s) failed " \
"(%lld %s %lld) " STR, #LEFT, #OP, #RIGHT, \
(longlong_t)__left, #OP, (longlong_t)__right, \
__VA_ARGS__); \
} while (0)
@@ -178,8 +182,8 @@ do { \
const uint64_t __right = (uint64_t)(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx) " STR, \
#LEFT, #OP, #RIGHT, \
"VERIFY3U(%s, %s, %s) failed " \
"(%llu %s %llu) " STR, #LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
__VA_ARGS__); \
} while (0)
@@ -190,20 +194,20 @@ do { \
const uintptr_t __right = (uintptr_t)(RIGHT); \
if (!(__left OP __right)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s %s %s (0x%llx %s 0x%llx) " STR, \
#LEFT, #OP, #RIGHT, \
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
"VERIFY3P(%s, %s, %s) failed " \
"(%p %s %p) " STR, #LEFT, #OP, #RIGHT, \
(void *)__left, #OP, (void *)__right, \
__VA_ARGS__); \
} while (0)
/* END CSTYLED */
#define VERIFY0F(LEFT, STR, ...) \
do { \
const uint64_t __left = (uint64_t)(LEFT); \
const int64_t __left = (int64_t)(LEFT); \
if (!(__left == 0)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s == 0 (0x%llx == 0) " STR, #LEFT, \
(u_longlong_t)__left, __VA_ARGS__); \
"VERIFY0(%s) failed (%lld) " STR, #LEFT, \
(longlong_t)__left, __VA_ARGS__); \
} while (0)
#define VERIFY0PF(LEFT, STR, ...) \
@@ -211,8 +215,8 @@ do { \
const uintptr_t __left = (uintptr_t)(LEFT); \
if (!(__left == 0)) \
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
"%s == 0 (%p == 0) " STR, #LEFT, \
(u_longlong_t)__left, __VA_ARGS__); \
"VERIFY0P(%s) failed (%p) " STR, #LEFT, \
(void *)__left, __VA_ARGS__); \
} while (0)
#ifdef assert
@@ -264,10 +268,7 @@ do { \
((void)(((!(A)) || (B)) || \
libspl_assert("(" #A ") implies (" #B ")", \
__FILE__, __FUNCTION__, __LINE__)))
#define EQUIV(A, B) \
((void)((!!(A) == !!(B)) || \
libspl_assert("(" #A ") is equivalent to (" #B ")", \
__FILE__, __FUNCTION__, __LINE__)))
#define EQUIV(A, B) VERIFY3B(A, ==, B)
#endif /* NDEBUG */