7#ifndef ZEPHYR_INCLUDE_SYS___ASSERT_H_
8#define ZEPHYR_INCLUDE_SYS___ASSERT_H_
15#define __ASSERT_ON CONFIG_ASSERT_LEVEL
19#ifdef CONFIG_FORCE_NO_ASSERT
35#if defined(CONFIG_ASSERT_VERBOSE)
36#define __ASSERT_PRINT(fmt, ...) assert_print(fmt, ##__VA_ARGS__)
38#define __ASSERT_PRINT(fmt, ...)
41#ifdef CONFIG_ASSERT_NO_MSG_INFO
42#define __ASSERT_MSG_INFO(fmt, ...)
44#define __ASSERT_MSG_INFO(fmt, ...) __ASSERT_PRINT("\t" fmt "\n", ##__VA_ARGS__)
47#if !defined(CONFIG_ASSERT_NO_COND_INFO) && !defined(CONFIG_ASSERT_NO_FILE_INFO)
48#define __ASSERT_LOC(test) \
49 __ASSERT_PRINT("ASSERTION FAIL [%s] @ %s:%d\n", \
54#if defined(CONFIG_ASSERT_NO_COND_INFO) && !defined(CONFIG_ASSERT_NO_FILE_INFO)
55#define __ASSERT_LOC(test) \
56 __ASSERT_PRINT("ASSERTION FAIL @ %s:%d\n", \
60#if !defined(CONFIG_ASSERT_NO_COND_INFO) && defined(CONFIG_ASSERT_NO_FILE_INFO)
61#define __ASSERT_LOC(test) \
62 __ASSERT_PRINT("ASSERTION FAIL [%s]\n", \
66#if defined(CONFIG_ASSERT_NO_COND_INFO) && defined(CONFIG_ASSERT_NO_FILE_INFO)
67#define __ASSERT_LOC(test) \
68 __ASSERT_PRINT("ASSERTION FAIL\n")
72#if (__ASSERT_ON < 0) || (__ASSERT_ON > 2)
73#error "Invalid __ASSERT() level: must be between 0 and 2"
82#ifdef CONFIG_ASSERT_NO_FILE_INFO
83void assert_post_action(
void);
84#define __ASSERT_POST_ACTION() assert_post_action()
86void assert_post_action(
const char *file,
unsigned int line);
87#define __ASSERT_POST_ACTION() assert_post_action(__FILE__, __LINE__)
95#ifdef CONFIG_ASSERT_TEST
96#define __ASSERT_UNREACHABLE
98#define __ASSERT_UNREACHABLE CODE_UNREACHABLE
105#define __ASSERT_NO_MSG(test) \
108 __ASSERT_LOC(test); \
109 __ASSERT_POST_ACTION(); \
110 __ASSERT_UNREACHABLE; \
114#define __ASSERT(test, fmt, ...) \
117 __ASSERT_LOC(test); \
118 __ASSERT_MSG_INFO(fmt, ##__VA_ARGS__); \
119 __ASSERT_POST_ACTION(); \
120 __ASSERT_UNREACHABLE; \
124#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) \
127 __ASSERT(test, fmt, ##__VA_ARGS__); \
130#if (__ASSERT_ON == 1)
131#warning "__ASSERT() statements are ENABLED"
134#define __ASSERT(test, fmt, ...) { }
135#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) expr1
136#define __ASSERT_NO_MSG(test) { }
137#define __ASSERT_POST_ACTION() { }
140#define __ASSERT(test, fmt, ...) { }
141#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) expr1
142#define __ASSERT_NO_MSG(test) { }
143#define __ASSERT_POST_ACTION() { }
void assert_print(const char *fmt,...)