mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
1422e96b4e
There's a new program named ape/ape-m1.c which will be used to build an embeddable binary that can load ape and elf executables. The support is mostly working so far, but still chasing down ABI issues.
52 lines
1.4 KiB
C
52 lines
1.4 KiB
C
#ifndef COSMOPOLITAN_LIBC_ASSERT_H_
|
|
#define COSMOPOLITAN_LIBC_ASSERT_H_
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
COSMOPOLITAN_C_START_
|
|
|
|
extern bool __assert_disable;
|
|
void __assert_fail(const char *, const char *, int) _Hide relegated;
|
|
|
|
#ifdef NDEBUG
|
|
#define assert(x) ((void)0)
|
|
#else
|
|
#define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__), 0)))
|
|
#endif
|
|
|
|
#ifndef __cplusplus
|
|
#define static_assert _Static_assert
|
|
#endif
|
|
|
|
#ifndef NDEBUG
|
|
#define _unassert(x) __assert_macro(x, #x)
|
|
#define _npassert(x) __assert_macro(x, #x)
|
|
#define __assert_macro(x, s) \
|
|
({ \
|
|
if (__builtin_expect(!(x), 0)) { \
|
|
__assert_fail(s, __FILE__, __LINE__); \
|
|
notpossible; \
|
|
} \
|
|
(void)0; \
|
|
})
|
|
#else
|
|
#define _unassert(x) \
|
|
({ \
|
|
if (__builtin_expect(!(x), 0)) { \
|
|
unreachable; \
|
|
} \
|
|
(void)0; \
|
|
})
|
|
#define _npassert(x) \
|
|
({ \
|
|
if (__builtin_expect(!(x), 0)) { \
|
|
notpossible; \
|
|
} \
|
|
(void)0; \
|
|
})
|
|
#endif
|
|
|
|
#ifdef __GNUC__
|
|
#endif
|
|
|
|
COSMOPOLITAN_C_END_
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_ASSERT_H_ */
|