1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

For usages of assert() that are meant to persist in Release builds (when NDEBUG is defined), replace those usages with persistent alternatives

This commit is contained in:
Craig Robbins 2015-03-06 20:21:51 +10:00
parent a603a76787
commit ced6d20295
62 changed files with 299 additions and 294 deletions

View file

@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <iostream>
#include <exception>
#include <assert.h>
#include "gettime.h"
#if (defined(WIN32) || defined(_WIN32_WCE))
@ -72,28 +73,38 @@ extern std::ostream dstream;
extern std::ostream dstream_no_stderr;
extern Nullstream dummyout;
/*
Include assert.h and immediately undef assert so that it can't override
our assert later on. leveldb/slice.h is a notable offender.
*/
#include <assert.h>
#undef assert
/* Abort program execution immediately
*/
__NORETURN extern void fatal_error_fn(
const char *msg, const char *file,
unsigned int line, const char *function);
#define FATAL_ERROR(msg) \
fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME)
#define FATAL_ERROR_IF(expr, msg) \
((expr) \
? fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME) \
: (void)(0))
/*
Assert
sanity_check()
Equivalent to assert() but persists in Release builds (i.e. when NDEBUG is
defined)
*/
__NORETURN extern void assert_fail(
__NORETURN extern void sanity_check_fn(
const char *assertion, const char *file,
unsigned int line, const char *function);
#define ASSERT(expr)\
((expr)\
? (void)(0)\
: assert_fail(#expr, __FILE__, __LINE__, __FUNCTION_NAME))
#define SANITY_CHECK(expr) \
((expr) \
? (void)(0) \
: sanity_check_fn(#expr, __FILE__, __LINE__, __FUNCTION_NAME))
#define sanity_check(expr) SANITY_CHECK(expr)
#define assert(expr) ASSERT(expr)
void debug_set_exception_handler();