Remove QT_TERMINATE_ON_EXCEPTION: no longer needed
When Marc introduced them way back in 2012 in commit c856e37c5fddec64d8635f3dae57b9cbea1aada4 ("Logging: mark qt_assert()/ qt_assert_x()/qFatal() as nothrow"), he said: > QT_TERMINATE_ON_EXCEPTION, which expands to something like > try { expr; } catch(...) { std::terminate(); } > if the compiler doesn't support Q_DECL_NOEXCEPT Well, all compilers now support noexcept, so we always had the plain do { } while (0) expansion instead. Change-Id: If3345151ddf84c43a4f1fffd17d27dbc0f100ec7 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
This commit is contained in:
parent
4c12ae7e67
commit
9b2ae564a5
@ -194,36 +194,6 @@ void qBadAlloc()
|
|||||||
\sa Q_ASSERT(), Q_UNREACHABLE(), Q_LIKELY()
|
\sa Q_ASSERT(), Q_UNREACHABLE(), Q_LIKELY()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
|
||||||
\macro QT_TERMINATE_ON_EXCEPTION(expr)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
\internal
|
|
||||||
|
|
||||||
In general, use of the Q_DECL_NOEXCEPT macro is preferred over
|
|
||||||
Q_DECL_NOTHROW, because it exhibits well-defined behavior and
|
|
||||||
supports the more powerful Q_DECL_NOEXCEPT_EXPR variant. However,
|
|
||||||
use of Q_DECL_NOTHROW has the advantage that Windows builds
|
|
||||||
benefit on a wide range or compiler versions that do not yet
|
|
||||||
support the C++11 noexcept feature.
|
|
||||||
|
|
||||||
It may therefore be beneficial to use Q_DECL_NOTHROW and emulate
|
|
||||||
the C++11 behavior manually with an embedded try/catch.
|
|
||||||
|
|
||||||
Qt provides the QT_TERMINATE_ON_EXCEPTION(expr) macro for this
|
|
||||||
purpose. It either expands to \c expr (if Qt is compiled without
|
|
||||||
exception support or the compiler supports C++11 noexcept
|
|
||||||
semantics) or to
|
|
||||||
\snippet code/src_corelib_global_qglobal.cpp qterminate
|
|
||||||
otherwise.
|
|
||||||
|
|
||||||
Since this macro expands to just \c expr if the compiler supports
|
|
||||||
C++11 noexcept, expecting the compiler to take over responsibility
|
|
||||||
of calling std::terminate() in that case, it should not be used
|
|
||||||
outside Q_DECL_NOTHROW functions.
|
|
||||||
|
|
||||||
\sa Q_DECL_NOEXCEPT, Q_DECL_NOTHROW, qTerminate()
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\macro void Q_UNREACHABLE()
|
\macro void Q_UNREACHABLE()
|
||||||
\relates <QtAssert>
|
\relates <QtAssert>
|
||||||
|
@ -28,17 +28,11 @@ Q_NORETURN Q_DECL_COLD_FUNCTION Q_CORE_EXPORT void qTerminate() noexcept;
|
|||||||
# define QT_CATCH(A) else
|
# define QT_CATCH(A) else
|
||||||
# define QT_THROW(A) qt_noop()
|
# define QT_THROW(A) qt_noop()
|
||||||
# define QT_RETHROW qt_noop()
|
# define QT_RETHROW qt_noop()
|
||||||
# define QT_TERMINATE_ON_EXCEPTION(expr) do { expr; } while (false)
|
|
||||||
#else
|
#else
|
||||||
# define QT_TRY try
|
# define QT_TRY try
|
||||||
# define QT_CATCH(A) catch (A)
|
# define QT_CATCH(A) catch (A)
|
||||||
# define QT_THROW(A) throw A
|
# define QT_THROW(A) throw A
|
||||||
# define QT_RETHROW throw
|
# define QT_RETHROW throw
|
||||||
# ifdef Q_COMPILER_NOEXCEPT
|
|
||||||
# define QT_TERMINATE_ON_EXCEPTION(expr) do { expr; } while (false)
|
|
||||||
# else
|
|
||||||
# define QT_TERMINATE_ON_EXCEPTION(expr) do { try { expr; } catch (...) { qTerminate(); } } while (false)
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -834,7 +834,7 @@ void QMessageLogger::fatal(const QLoggingCategory &cat, const char *msg, ...) co
|
|||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, msg); // use variable arg list
|
va_start(ap, msg); // use variable arg list
|
||||||
QT_TERMINATE_ON_EXCEPTION(qt_message(QtFatalMsg, ctxt, msg, ap));
|
qt_message(QtFatalMsg, ctxt, msg, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
#ifndef Q_CC_MSVC_ONLY
|
#ifndef Q_CC_MSVC_ONLY
|
||||||
@ -858,7 +858,7 @@ void QMessageLogger::fatal(QMessageLogger::CategoryFunction catFunc,
|
|||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, msg); // use variable arg list
|
va_start(ap, msg); // use variable arg list
|
||||||
QT_TERMINATE_ON_EXCEPTION(qt_message(QtFatalMsg, ctxt, msg, ap));
|
qt_message(QtFatalMsg, ctxt, msg, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
#ifndef Q_CC_MSVC_ONLY
|
#ifndef Q_CC_MSVC_ONLY
|
||||||
@ -877,7 +877,7 @@ void QMessageLogger::fatal(const char *msg, ...) const noexcept
|
|||||||
QInternalMessageLogContext ctxt(context);
|
QInternalMessageLogContext ctxt(context);
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, msg); // use variable arg list
|
va_start(ap, msg); // use variable arg list
|
||||||
QT_TERMINATE_ON_EXCEPTION(qt_message(QtFatalMsg, ctxt, msg, ap));
|
qt_message(QtFatalMsg, ctxt, msg, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
#ifndef Q_CC_MSVC_ONLY
|
#ifndef Q_CC_MSVC_ONLY
|
||||||
|
Loading…
x
Reference in New Issue
Block a user