}
void
-assert_failed (const char *filename, int line)
+assert_failed (const char *filename, int line, const char *condition)
{
- msg (M_FATAL, "Assertion failed at %s:%d", filename, line);
+ if (condition)
+ msg (M_FATAL, "Assertion failed at %s:%d (%s)", filename, line, condition);
+ else
+ msg (M_FATAL, "Assertion failed at %s:%d", filename, line);
_exit(1);
}
FILE *msg_fp(const unsigned int flags);
/* Fatal logic errors */
-#define ASSERT(x) do { if (!(x)) assert_failed(__FILE__, __LINE__); } while (false)
+#ifndef ENABLE_SMALL
+#define ASSERT(x) do { if (!(x)) assert_failed(__FILE__, __LINE__, #x); } while (false)
+#else
+#define ASSERT(x) do { if (!(x)) assert_failed(__FILE__, __LINE__, NULL); } while (false)
+#endif
-void assert_failed (const char *filename, int line) __attribute__((__noreturn__));
+void assert_failed (const char *filename, int line, const char *condition)
+ __attribute__((__noreturn__));
#ifdef ENABLE_DEBUG
void crash (void); /* force a segfault (debugging only) */