11#ifndef EIGEN_CORE_UTIL_ASSERT_H
12#define EIGEN_CORE_UTIL_ASSERT_H
31#if !defined(EIGEN_NO_DEBUG) && (!defined(EIGEN_GPU_COMPILE_PHASE) || !defined(EIGEN_NO_DEBUG_GPU))
35#ifndef EIGEN_USE_CUSTOM_PLAIN_ASSERT
37#define EIGEN_USE_CUSTOM_PLAIN_ASSERT 0
40#if EIGEN_USE_CUSTOM_PLAIN_ASSERT
42#ifndef EIGEN_HAS_BUILTIN_FILE
49#if (EIGEN_HAS_BUILTIN(__builtin_FILE) && (EIGEN_COMP_CLANG || !defined(EIGEN_CUDA_ARCH))) || \
50 (EIGEN_COMP_GNUC_STRICT && (EIGEN_COMP_NVCC >= 110000 || !defined(EIGEN_CUDA_ARCH))) || \
51 (EIGEN_COMP_MSVC >= 1926 && (!EIGEN_COMP_NVCC || EIGEN_COMP_NVCC >= 110000))
52#define EIGEN_HAS_BUILTIN_FILE 1
54#define EIGEN_HAS_BUILTIN_FILE 0
58#if EIGEN_HAS_BUILTIN_FILE
59#define EIGEN_BUILTIN_FILE __builtin_FILE()
60#define EIGEN_BUILTIN_LINE __builtin_LINE()
63#define EIGEN_BUILTIN_FILE __FILE__
64#define EIGEN_BUILTIN_LINE __LINE__
72#define EIGEN_BUILTIN_FUNCTION __FUNCSIG__
74#define EIGEN_BUILTIN_FUNCTION __PRETTY_FUNCTION__
76#define EIGEN_BUILTIN_FUNCTION __func__
83template <
typename EnableIf = void,
typename... EmptyArgs>
84struct assert_handler_impl {
85 EIGEN_DEVICE_FUNC EIGEN_DONT_INLINE
static inline void run(
const char* expression,
const char* file,
unsigned line,
86 const char* function) {
87#ifdef EIGEN_GPU_COMPILE_PHASE
91 printf(
"Assertion failed at %s:%u in %s: %s\n", file ==
nullptr ?
"<file>" : file, line,
92 function ==
nullptr ?
"<function>" : function, expression);
100 fprintf(stderr,
"Assertion failed at %s:%u in %s: %s\n", file ==
nullptr ?
"<file>" : file, line,
101 function ==
nullptr ?
"<function>" : function, expression);
117template <
typename... EmptyArgs>
118struct assert_handler_impl<void_t<decltype(__assert_fail((const char*)
nullptr,
119 (
const char*)
nullptr,
121 (
const char*)
nullptr,
122 std::declval<EmptyArgs>()...
126 EIGEN_DEVICE_FUNC EIGEN_DONT_INLINE
static inline void run(
const char* expression,
const char* file,
unsigned line,
127 const char* function) {
129 __assert_fail(expression, file, line, function, std::declval<EmptyArgs>()...);
133EIGEN_DEVICE_FUNC EIGEN_DONT_INLINE
inline void __assert_handler(
const char* expression,
const char* file,
134 unsigned line,
const char* function) {
135 assert_handler_impl<>::run(expression, file, line, function);
141#define eigen_plain_assert(expression) \
142 (EIGEN_PREDICT_FALSE(!(expression)) ? Eigen::internal::__assert_handler(#expression, EIGEN_BUILTIN_FILE, \
143 EIGEN_BUILTIN_LINE, EIGEN_BUILTIN_FUNCTION) \
149#define eigen_plain_assert(condition) assert(condition)
155#define eigen_plain_assert(condition) ((void)0)