12345678910111213141516171819202122232425262728293031323334353637383940 |
- /*
- * assert.h
- *
- * Define a common interface for assertions that builds for both the PAL
- * and libOS.
- *
- */
- #ifndef ASSERT_H
- #define ASSERT_H
- #include <stdnoreturn.h>
- #define static_assert _Static_assert
- /* All environments should implement warn, which prints a non-optional debug
- * message. All environments should also implement __abort, which
- * terminates the process.
- */
- void warn(const char* format, ...) __attribute__((format(printf, 1, 2)));
- noreturn void __abort(void);
- /* TODO(mkow): We should actually use the standard `NDEBUG`, but that would require changes in the
- * build system.
- */
- #ifdef DEBUG
- #define assert(expr) \
- ({ \
- (!(expr)) ? ({ \
- warn("assert failed " __FILE__ ":%d %s\n", __LINE__, #expr); \
- __abort(); \
- }) \
- : (void)0; \
- })
- #else
- #define assert(expr) ((void)0)
- #endif
- #endif /* ASSERT_H */
|