if (predicate) { \
/*null*/; \
} else { \
- foreign "C" _stgAssert(NULL, __LINE__); \
+ foreign "C" _assertFail(NULL, __LINE__); \
}
#else
#define ASSERT(p) /* nothing */
#define ASSERT(predicate) /* nothing */
#else
-void _stgAssert (char *, unsigned int);
+extern void _assertFail (char *, unsigned int);
#define ASSERT(predicate) \
if (predicate) \
/*null*/; \
else \
- _stgAssert(__FILE__, __LINE__)
+ _assertFail(__FILE__, __LINE__)
#endif /* DEBUG */
/*
extern void vbarf(char *s, va_list ap)
GNUC3_ATTRIBUTE(__noreturn__);
+extern void _assertFail(char *filename, unsigned int linenum)
+ GNUC3_ATTRIBUTE(__noreturn__);
+
/*
* An error condition which is caused by and/or can be corrected by
* the user.
stg_exit(EXIT_INTERNAL_ERROR); // just in case fatalInternalErrorFn() returns
}
+void
+_assertFail(char *filename, unsigned int linenum)
+{
+ internalErrorBelch("ASSERTION FAILED: file %s, line %u\n", filename, linenum);
+ abort();
+}
+
+internalErrorBelch(char *s, ...)
+{
+ va_list ap;
+ va_start(ap,s);
+ (*fatalInternalErrorFn)(s,ap);
+ va_end(ap);
+}
+
void
errorBelch(char *s, ...)
{
free(p);
}
-void
-_stgAssert (char *filename, unsigned int linenum)
-{
- fflush(stdout);
- fprintf(stderr, "ASSERTION FAILED: file %s, line %u\n", filename, linenum);
- fflush(stderr);
- abort();
-}
-
/* -----------------------------------------------------------------------------
Stack overflow
* Misc other utilities
* -------------------------------------------------------------------------- */
-extern void _stgAssert (char *filename, unsigned int linenum);
-
extern void heapOverflow(void);
extern void setNonBlockingFd(int fd);