|  | /* See COPYRIGHT for copyright information. */ | 
|  |  | 
|  | #ifndef ROS_INC_ASSERT_H | 
|  | #define ROS_INC_ASSERT_H | 
|  |  | 
|  | #include <assert.h> | 
|  | #include <vcore.h> | 
|  | #include <ros_debug.h> | 
|  | #undef assert | 
|  |  | 
|  | void _warn(const char*, int, const char*, ...); | 
|  | void _panic(const char*, int, const char*, ...) __attribute__((noreturn)); | 
|  |  | 
|  | #define warn(...) _warn(__FILE__, __LINE__, __VA_ARGS__) | 
|  | #define panic(...) _panic(__FILE__, __LINE__, __VA_ARGS__) | 
|  |  | 
|  | #define assert(x)	                                                           \ | 
|  | do {                                                                       \ | 
|  | if (!(x)) {                                                            \ | 
|  | ros_debug("[user] %s:%d, vcore %d, Assertion failed: %s\n",        \ | 
|  | __FILE__, __LINE__, vcore_id(), #x);                     \ | 
|  | breakpoint();                                                      \ | 
|  | abort();                                                           \ | 
|  | }                                                                      \ | 
|  | } 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): | 
|  |  | 
|  | #endif /* !ROS_INC_ASSERT_H */ |