1570af302Sopenharmony_ci#include <features.h> 2570af302Sopenharmony_ci 3570af302Sopenharmony_ci#undef assert 4570af302Sopenharmony_ci#ifndef MUSL_ASSERT_H 5570af302Sopenharmony_ci#define MUSL_ASSERT_H 6570af302Sopenharmony_ci 7570af302Sopenharmony_ci#ifdef __cplusplus 8570af302Sopenharmony_ciextern "C" { 9570af302Sopenharmony_ci#endif 10570af302Sopenharmony_citypedef enum Assert_Status { 11570af302Sopenharmony_ci ASSERT_ABORT, 12570af302Sopenharmony_ci ASSERT_RETRY, 13570af302Sopenharmony_ci ASSERT_IGNORE 14570af302Sopenharmony_ci}Assert_Status; 15570af302Sopenharmony_ci 16570af302Sopenharmony_citypedef struct AssertFailureInfo { 17570af302Sopenharmony_ci char *expression; 18570af302Sopenharmony_ci char *file; 19570af302Sopenharmony_ci char *function; 20570af302Sopenharmony_ci int line; 21570af302Sopenharmony_ci}AssertFailureInfo; 22570af302Sopenharmony_ci 23570af302Sopenharmony_citypedef Assert_Status(*assert_call)(AssertFailureInfo assert_fail); 24570af302Sopenharmony_civoid set_assert_callback(assert_call cb); 25570af302Sopenharmony_ci 26570af302Sopenharmony_ci#ifdef __cplusplus 27570af302Sopenharmony_ci} 28570af302Sopenharmony_ci#endif 29570af302Sopenharmony_ci#endif 30570af302Sopenharmony_ci 31570af302Sopenharmony_ci#ifdef NDEBUG 32570af302Sopenharmony_ci#define assert(x) (void)0 33570af302Sopenharmony_ci#else 34570af302Sopenharmony_ci#define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__, __func__),0))) 35570af302Sopenharmony_ci#endif 36570af302Sopenharmony_ci 37570af302Sopenharmony_ci#if __STDC_VERSION__ >= 201112L && !defined(__cplusplus) 38570af302Sopenharmony_ci#define static_assert _Static_assert 39570af302Sopenharmony_ci#endif 40570af302Sopenharmony_ci 41570af302Sopenharmony_ci#ifdef __cplusplus 42570af302Sopenharmony_ciextern "C" { 43570af302Sopenharmony_ci#endif 44570af302Sopenharmony_ci 45570af302Sopenharmony_civoid __assert_fail (const char *, const char *, int, const char *); 46570af302Sopenharmony_ci 47570af302Sopenharmony_ci#ifdef __cplusplus 48570af302Sopenharmony_ci} 49570af302Sopenharmony_ci#endif 50