7#include <QtCore/qcompilerdetection.h>
8#include <QtCore/qtconfigmacros.h>
9#include <QtCore/qtcoreexports.h>
10#include <QtCore/qtnoop.h>
13#pragma qt_class(QtAssert)
14#pragma qt_sync_stop_processing
19#if defined(__cplusplus
)
21#if !defined(Q_CC_MSVC_ONLY)
25Q_CORE_EXPORT
void qt_assert(
const char *assertion,
const char *file,
int line)
noexcept;
28# if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
29# define Q_ASSERT(cond) static_cast<void>(false && (cond))
31# define Q_ASSERT(cond) ((cond) ? static_cast<void>(0
) : QT_PREPEND_NAMESPACE(qt_assert)(#cond, __FILE__, __LINE__))
35#if !defined(Q_CC_MSVC_ONLY)
40void qt_assert_x(
const char *where,
const char *what,
const char *file,
int line)
noexcept;
41inline bool qt_no_assert_x(
bool,
const char *,
const char *)
noexcept {
return false; }
43#if !defined(Q_ASSERT_X)
44# if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
45# define Q_ASSERT_X(cond, where, what)
46 static_cast<void>(false && QT_PREPEND_NAMESPACE(qt_no_assert_x)(bool(cond), where, what))
48# define Q_ASSERT_X(cond, where, what) ((cond) ? static_cast<void>(0
) : QT_PREPEND_NAMESPACE(qt_assert_x)(where, what, __FILE__, __LINE__))
58# define Q_PRE_X(cond, what)
63Q_NORETURN Q_DECL_COLD_FUNCTION
64Q_CORE_EXPORT
void qBadAlloc();
66#ifdef QT_NO_EXCEPTIONS
67# if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
68# define Q_CHECK_PTR(p) qt_noop()
70# define Q_CHECK_PTR(p) do {if (!(p)) QT_PREPEND_NAMESPACE(qt_check_pointer)(__FILE__,__LINE__);} while (false)
73# define Q_CHECK_PTR(p) do { if (!(p)) QT_PREPEND_NAMESPACE(qBadAlloc)(); } while (false)
77inline T *q_check_ptr(T *p) { Q_CHECK_PTR(p);
return p; }
80#define Q_UNREACHABLE()
82 Q_ASSERT_X(false, "Q_UNREACHABLE()", "Q_UNREACHABLE was reached");
86#ifndef Q_UNREACHABLE_RETURN
87# ifdef Q_COMPILER_COMPLAINS_ABOUT_RETURN_AFTER_UNREACHABLE
88# define Q_UNREACHABLE_RETURN(...) Q_UNREACHABLE()
90# define Q_UNREACHABLE_RETURN(...) do { Q_UNREACHABLE
(); return __VA_ARGS__; } while (0
)
94Q_DECL_DEPRECATED_X(
"Q_ASSUME() is deprecated because it can produce worse code than when it's absent; "
95 "use C++23 [[assume]] instead")
96inline bool qt_assume_is_deprecated(
bool cond)
noexcept {
return cond; }
98 [] (bool valueOfExpression) {
99 Q_ASSERT_X(valueOfExpression, "Q_ASSUME()", "Assumption in Q_ASSUME(\"" #Expr "\") was not correct");
100 Q_ASSUME_IMPL(valueOfExpression);
101 }(qt_assume_is_deprecated(Expr))
105# define Q_STATIC_ASSERT(Condition) static_assert(bool(Condition), #Condition)
106# define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
108#elif defined(Q_COMPILER_STATIC_ASSERT)
110# define Q_STATIC_ASSERT(Condition) _Static_assert(!!(Condition), #Condition)
111# define Q_STATIC_ASSERT_X(Condition, Message) _Static_assert(!!(Condition), Message)
114# define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B)
115# define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B
117# define Q_STATIC_ASSERT(Condition)
118 typedef char Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __COUNTER__) [(Condition) ? 1
: -1
];
120# define Q_STATIC_ASSERT(Condition)
121 typedef char Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) [(Condition) ? 1
: -1
];
123# define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition)
void qt_assert_x(const char *where, const char *what, const char *file, int line) noexcept
QT_BEGIN_NAMESPACE Q_NORETURN void qAbort()
void qt_check_pointer(const char *n, int l) noexcept
#define Q_ASSERT_X(cond, x, msg)