]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/os/freebsd/spl/sys/debug.h
Clean up existing VERIFY*() macros.
[mirror_zfs.git] / include / os / freebsd / spl / sys / debug.h
index 1f820bc3345f6766fa2ece33b145e65d6c121e9f..b29d0daecc4bb6b66fc9e5c46696c89492b8f572 100644 (file)
 /*
  * Common DEBUG functionality.
  */
-int spl_panic(const char *file, const char *func, int line,
-    const char *fmt, ...);
-void spl_dumpstack(void);
+#if defined(__COVERITY__) || defined(__clang_analyzer__)
+__attribute__((__noreturn__))
+#endif
+extern void spl_panic(const char *file, const char *func, int line,
+    const char *fmt, ...) __attribute__((__noreturn__));
+extern void spl_dumpstack(void);
+
+static inline int
+spl_assert(const char *buf, const char *file, const char *func, int line)
+{
+       spl_panic(file, func, line, "%s", buf);
+       return (0);
+}
 
 #ifndef expect
 #define        expect(expr, value) (__builtin_expect((expr), (value)))
@@ -64,83 +74,86 @@ void spl_dumpstack(void);
 #define        likely(expr)   expect((expr) != 0, 1)
 #define        unlikely(expr) expect((expr) != 0, 0)
 
-/* BEGIN CSTYLED */
 #define        PANIC(fmt, a...)                                                \
        spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
 
-#define        VERIFY(cond)                                                                            \
-       (void) (unlikely(!(cond)) &&                                                    \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__,                 \
-           "%s", "VERIFY(" #cond ") failed\n"))
+#define        VERIFY(cond)                                                    \
+       (void) (unlikely(!(cond)) &&                                    \
+           spl_assert("VERIFY(" #cond ") failed\n",                    \
+           __FILE__, __FUNCTION__, __LINE__))
 
-#define        VERIFY3B(LEFT, OP, RIGHT)       do {                                    \
+#define        VERIFY3B(LEFT, OP, RIGHT)       do {                            \
                const boolean_t _verify3_left = (boolean_t)(LEFT);      \
-               const boolean_t _verify3_right = (boolean_t)(RIGHT);\
+               const boolean_t _verify3_right = (boolean_t)(RIGHT);    \
                if (unlikely(!(_verify3_left OP _verify3_right)))       \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
-                   "failed (%d " #OP " %d)\n",                                         \
-                   (boolean_t) (_verify3_left),                                        \
-                   (boolean_t) (_verify3_right));                                      \
+                   "failed (%d " #OP " %d)\n",                         \
+                   (boolean_t)_verify3_left,                           \
+                   (boolean_t)_verify3_right);                         \
        } while (0)
 
-#define        VERIFY3S(LEFT, OP, RIGHT)       do {                                    \
+#define        VERIFY3S(LEFT, OP, RIGHT)       do {                            \
                const int64_t _verify3_left = (int64_t)(LEFT);          \
                const int64_t _verify3_right = (int64_t)(RIGHT);        \
                if (unlikely(!(_verify3_left OP _verify3_right)))       \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
-                   "failed (%lld " #OP " %lld)\n",                                     \
-                   (long long) (_verify3_left),                                        \
-                   (long long) (_verify3_right));                                      \
+                   "failed (%lld " #OP " %lld)\n",                     \
+                   (long long)_verify3_left,                           \
+                   (long long)_verify3_right);                         \
        } while (0)
 
-#define        VERIFY3U(LEFT, OP, RIGHT)       do {                                    \
+#define        VERIFY3U(LEFT, OP, RIGHT)       do {                            \
                const uint64_t _verify3_left = (uint64_t)(LEFT);        \
                const uint64_t _verify3_right = (uint64_t)(RIGHT);      \
                if (unlikely(!(_verify3_left OP _verify3_right)))       \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
-                   "failed (%llu " #OP " %llu)\n",                                     \
-                   (unsigned long long) (_verify3_left),                       \
-                   (unsigned long long) (_verify3_right));                     \
+                   "failed (%llu " #OP " %llu)\n",                     \
+                   (unsigned long long)_verify3_left,                  \
+                   (unsigned long long)_verify3_right);                \
        } while (0)
 
-#define        VERIFY3P(LEFT, OP, RIGHT)       do {                                    \
+#define        VERIFY3P(LEFT, OP, RIGHT)       do {                            \
                const uintptr_t _verify3_left = (uintptr_t)(LEFT);      \
-               const uintptr_t _verify3_right = (uintptr_t)(RIGHT);\
+               const uintptr_t _verify3_right = (uintptr_t)(RIGHT);    \
                if (unlikely(!(_verify3_left OP _verify3_right)))       \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
-                   "failed (%px " #OP " %px)\n",                                       \
-                   (void *) (_verify3_left),                                           \
-                   (void *) (_verify3_right));                                         \
+                   "failed (%p " #OP " %p)\n",                         \
+                   (void *)_verify3_left,                              \
+                   (void *)_verify3_right);                            \
        } while (0)
 
-#define        VERIFY0(RIGHT)  do {                                                            \
-               const int64_t _verify3_left = (int64_t)(0);                     \
-               const int64_t _verify3_right = (int64_t)(RIGHT);        \
-               if (unlikely(!(_verify3_left == _verify3_right)))       \
+#define        VERIFY0(RIGHT)  do {                                            \
+               const int64_t _verify0_right = (int64_t)(RIGHT);        \
+               if (unlikely(!(0 == _verify0_right)))                   \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
-                   "VERIFY3(0 == " #RIGHT ") "                                         \
-                   "failed (0 == %lld)\n",                                                     \
-                   (long long) (_verify3_right));                                      \
+                   "VERIFY0(" #RIGHT ") "                              \
+                   "failed (0 == %lld)\n",                             \
+                   (long long)_verify0_right);                         \
        } while (0)
-#define        CTASSERT_GLOBAL(x)              CTASSERT(x)
 
 /*
  * Debugging disabled (--disable-debug)
  */
 #ifdef NDEBUG
 
-#define        ASSERT(x)               ((void)0)
-#define        ASSERT3B(x,y,z)         ((void)0)
-#define        ASSERT3S(x,y,z)         ((void)0)
-#define        ASSERT3U(x,y,z)         ((void)0)
-#define        ASSERT3P(x,y,z)         ((void)0)
-#define        ASSERT0(x)              ((void)0)
-#define        IMPLY(A, B)             ((void)0)
-#define        EQUIV(A, B)             ((void)0)
+#define        ASSERT(x)               ((void) sizeof ((uintptr_t)(x)))
+#define        ASSERT3B(x, y, z)                                               \
+       ((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
+#define        ASSERT3S(x, y, z)                                               \
+       ((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
+#define        ASSERT3U(x, y, z)                                               \
+       ((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
+#define        ASSERT3P(x, y, z)                                               \
+       ((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z)))
+#define        ASSERT0(x)              ((void) sizeof ((uintptr_t)(x)))
+#define        IMPLY(A, B)                                                     \
+       ((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B)))
+#define        EQUIV(A, B)             \
+       ((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B)))
 
 /*
  * Debugging enabled (--enable-debug)
@@ -154,14 +167,14 @@ void spl_dumpstack(void);
 #define        ASSERT0         VERIFY0
 #define        ASSERT          VERIFY
 #define        IMPLY(A, B) \
-       ((void)(likely((!(A)) || (B)) || \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
-           "(" #A ") implies (" #B ")")))
+       ((void)(likely((!(A)) || (B)) ||                                \
+           spl_assert("(" #A ") implies (" #B ")",                     \
+           __FILE__, __FUNCTION__, __LINE__)))
 #define        EQUIV(A, B) \
-       ((void)(likely(!!(A) == !!(B)) || \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
-           "(" #A ") is equivalent to (" #B ")")))
-/* END CSTYLED */
+       ((void)(likely(!!(A) == !!(B)) ||                               \
+           spl_assert("(" #A ") is equivalent to (" #B ")",            \
+           __FILE__, __FUNCTION__, __LINE__)))
+
 
 #endif /* NDEBUG */