| /* See COPYRIGHT for copyright information. */ |
| |
| #ifndef ROS_INC_ASSERT_H |
| #define ROS_INC_ASSERT_H |
| |
| void ( _warn)(const char* NTS, int, const char* NTS, ...); |
| void ( _panic)(const char* NTS, int, const char* NTS, ...) |
| __attribute__((noreturn)); |
| |
| #define warn(...) _warn(__FILE__, __LINE__, __VA_ARGS__) |
| #define warn_once(...) run_once_racy(warn(__VA_ARGS__)) |
| #define panic(...) _panic(__FILE__, __LINE__, __VA_ARGS__) |
| #define exhausted(...) _panic(__FILE__, __LINE__, __VA_ARGS__) |
| |
| |
| #define check(x) \ |
| do { if (!(x)) warn("warning failed: %s", #x); } while (0) |
| |
| #define assert(x) \ |
| do { if (!(x)) panic("assertion failed: %s", #x); } while (0) |
| |
| // static_assert(x) will generate a compile-time error if 'x' is false. |
| #define static_assert(x) switch (x) case 0: case (x): |
| |
| #ifdef CONFIG_DEVELOPMENT_ASSERTIONS |
| #define dassert(x) assert(x) |
| #else |
| #define dassert(x) |
| #endif /* DEVELOPMENT_ASSERTIONS */ |
| |
| #endif /* !ROS_INC_ASSERT_H */ |