Browse Source

Util: Fix asserts in release mode

master
Riyyi 2 years ago
parent
commit
0eadcc555a
  1. 15
      src/ruc/meta/assert.h

15
src/ruc/meta/assert.h

@ -16,19 +16,24 @@
#include "ruc/format/format.h" #include "ruc/format/format.h"
#include "ruc/meta/compiler.h" #include "ruc/meta/compiler.h"
#define CRASH() asm volatile("int $0x03"); #define CRASH() ruc::__crash()
#ifndef NDEBUG #ifndef NDEBUG
#define VERIFY(expr, ...) (static_cast<bool>(expr) ? (void)0 : ruc::__assertion_failed(#expr, __FILE__, __LINE__, FUNCTION_MACRO __VA_OPT__(, ) __VA_ARGS__)) #define VERIFY(expr, ...) (static_cast<bool>(expr) ? (void)0 : ruc::__assertion_failed(#expr, __FILE__, __LINE__, FUNCTION_MACRO __VA_OPT__(, ) __VA_ARGS__))
#define VERIFY_NOT_REACHED() VERIFY(false) #define VERIFY_NOT_REACHED() VERIFY(false)
#else #else
#define VERIFY(expr, ...) (static_cast<bool>(expr) ? (void)0 : CRASH() #define VERIFY(expr, ...) (static_cast<bool>(expr) ? (void)0 : CRASH())
#define VERIFY_NOT_REACHED() CRASH() #define VERIFY_NOT_REACHED() VERIFY(false)
#endif #endif
#ifndef NDEBUG
namespace ruc { namespace ruc {
inline void __crash()
{
asm volatile("int $0x03");
}
#ifndef NDEBUG
template<typename... Parameters> template<typename... Parameters>
inline void __assertion_failed(const char* assertion, const char* file, uint32_t line, const char* function, const Parameters&... parameters) inline void __assertion_failed(const char* assertion, const char* file, uint32_t line, const char* function, const Parameters&... parameters)
{ {
@ -91,6 +96,6 @@ inline void __assertion_failed(const char* assertion, const char* file, uint32_t
CRASH(); CRASH();
} }
#endif
} // namespace ruc } // namespace ruc
#endif

Loading…
Cancel
Save