#ifndef COSMOPOLITAN_LIBC_ASSERT_H_
#define COSMOPOLITAN_LIBC_ASSERT_H_
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_

void __assert_fail(const char *, const char *, int) hidden noreturn relegated;

#ifdef NDEBUG
#define __ASSERT_FAIL(EXPR, FILE, LINE)
#else
#define __ASSERT_FAIL(EXPR, FILE, LINE) __assert_fail(EXPR, FILE, LINE)
#endif

#define assert(EXPR)                            \
  do {                                          \
    if (!(EXPR)) {                              \
      __ASSERT_FAIL(#EXPR, __FILE__, __LINE__); \
      unreachable;                              \
    }                                           \
  } while (0)

COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_ASSERT_H_ */
