Implemented the new profiler
[akaros.git] / kern / include / assert.h
1 /* See COPYRIGHT for copyright information. */
2
3 #pragma once
4
5 void ( _warn)(const char *, int, const char *, ...);
6 void ( _panic)(const char *, int, const char *, ...)
7         __attribute__((noreturn));
8
9 #define warn(...) _warn(__FILE__, __LINE__, __VA_ARGS__)
10 #define warn_once(...) run_once_racy(warn(__VA_ARGS__))
11 #define warn_on(x) do { if (x) warn(#x);} while (0)
12 #define warn_on_once(x) do { if (x) warn_once(#x);} while (0)
13 #define panic(...) _panic(__FILE__, __LINE__, __VA_ARGS__)
14 #define exhausted(...) _panic(__FILE__, __LINE__, __VA_ARGS__)
15
16 #define assert(x)               \
17         do { if (!(x)) panic("assertion failed: %s", #x); } while (0)
18
19 // static_assert(x) will generate a compile-time error if 'x' is false.
20 #define static_assert(x)        switch (x) case 0: case (x):
21
22 #ifdef CONFIG_DEVELOPMENT_ASSERTIONS
23 #define dassert(x) assert(x)
24 #else
25 #define dassert(x) ((void) (x))  // 'Use' value, stop compile warnings
26 #endif /* DEVELOPMENT_ASSERTIONS */