/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2014, STMicroelectronics International N.V. */ #ifndef ASSERT_H #define ASSERT_H #include #include void __noreturn _assert_break(void); void _assert_log(const char *expr, const char *file, const int line, const char *func); /* assert() specs: generates a log but does not panic if NDEBUG is defined */ #ifdef NDEBUG #define assert(expr) do { } while (0) #define __assert_func(f, l, n1, n2) do { } while (0) #else #define assert(expr) \ do { \ if (!(expr)) { \ _assert_log(#expr, __FILE__, __LINE__, __func__); \ _assert_break(); \ } \ } while (0) #define __assert_func(f, l, n1, n2) \ do { \ _assert_log(n2, __FILE__, __LINE__, __func__); \ _assert_break(); \ } while (0); #endif #define COMPILE_TIME_ASSERT(x) \ do { \ switch (0) { case 0: case ((x) ? 1: 0): default : break; } \ } while (0) /* Unconditional assert */ #define ASSERT(expr) assert(expr) #endif