diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2023-04-18 08:34:03 -0700 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-04-21 14:08:48 +0000 |
commit | 224eb8e3afc7cf3fde4f8b7d4610c078ee59e994 (patch) | |
tree | 59c35064c0d5677c6873d45272aae013cbfc258c | |
parent | 8fae0aa4aec2a3305a60a5e8c47ddc457ce15619 (diff) |
ACTION_IF: suppress GCC 13 warning about leaked dangling pointer
GCC 13 says:
In member function ‘void QAbstractAnimationJob::setState(State)’,
inlined from ‘void QAbstractAnimationJob::setState(State)’ at animations/qabstractanimationjob.cpp:295:6,
inlined from ‘void QAbstractAnimationJob::complete()’ at animations/qabstractanimationjob.cpp:528:13:
animations/qanimationjobutil_p.h:41:39: error: storing the address of local variable ‘wasDeleted’ in ‘*this.QAbstractAnimationJob::m_selfDeletable.SelfDeletable::m_wasDeleted’ [-Werror=dangling-pointer=]
This warning is produced when the action is "return" (used by the
RETURN_IF_DELETED macro) because we'd leave m_wasDeleted with the
dangling pointer. However, it's not really dangling because it was
deleted, but GCC doesn't know that.
Change-Id: I3b169860d8bd41e9be6bfffd1757115520a67972
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 7c33b6e9571d0ee25808acf87b1c7e7317a5a9be)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/qml/animations/qanimationjobutil_p.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/qml/animations/qanimationjobutil_p.h b/src/qml/animations/qanimationjobutil_p.h index f4798b127a..fb323d7c89 100644 --- a/src/qml/animations/qanimationjobutil_p.h +++ b/src/qml/animations/qanimationjobutil_p.h @@ -15,10 +15,19 @@ // We mean it. // +#include <QtCore/qcompilerdetection.h> +#include <QtCore/qtconfigmacros.h> + #include <type_traits> QT_REQUIRE_CONFIG(qml_animation); +#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU_ONLY >= 1300 +# define ACTION_IF_DISABLE_DANGLING_POINTER_WARNING QT_WARNING_DISABLE_GCC("-Wdangling-pointer") +#else +# define ACTION_IF_DISABLE_DANGLING_POINTER_WARNING +#endif + // SelfDeletable is used for self-destruction detection along with // ACTION_IF_DELETED and RETURN_IF_DELETED macros. While using, the objects // under test should have a member m_selfDeletable of type SelfDeletable @@ -35,6 +44,8 @@ struct SelfDeletable { // \param action post process if p was deleted under test. #define ACTION_IF_DELETED(p, func, action) \ do { \ + QT_WARNING_PUSH \ + ACTION_IF_DISABLE_DANGLING_POINTER_WARNING \ static_assert(std::is_same<decltype((p)->m_selfDeletable), SelfDeletable>::value, "m_selfDeletable must be SelfDeletable");\ bool *prevWasDeleted = (p)->m_selfDeletable.m_wasDeleted; \ bool wasDeleted = false; \ @@ -46,6 +57,7 @@ do { \ {action;} \ } \ (p)->m_selfDeletable.m_wasDeleted = prevWasDeleted; \ + QT_WARNING_POP \ } while (false) #define RETURN_IF_DELETED(func) \ |