From e966f3189a042c07f56f85afe7966e366f216126 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 14 Feb 2022 08:40:45 +0100 Subject: [PATCH] QtCore: De-duplicate vtables, 2024 edition This de-inlines destuctors of classes whose vtables are proven to be duplicated by -Wweak-tables using the upcoming headersclean for _p.h feature. Since these are all private API classes, we can pick all the way back to 6.2, and we don't need the comment that the dtor must always stay empty, like for public classes. Task-number: QTBUG-45582 Task-number: QTBUG-126219 Change-Id: I8c864c0d2ed3ca20d20d5cfc356290eb529edf6c Reviewed-by: Alexey Edelev (cherry picked from commit 3af20bd8eb8c75017c5d6d138d7c42914ee5bee3) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/animation/qpropertyanimation.cpp | 3 +++ src/corelib/animation/qpropertyanimation_p.h | 1 + src/corelib/animation/qvariantanimation.cpp | 3 +++ src/corelib/animation/qvariantanimation_p.h | 1 + src/corelib/io/qabstractfileengine.cpp | 3 +++ src/corelib/io/qabstractfileengine_p.h | 2 +- src/corelib/itemmodels/qidentityproxymodel.cpp | 3 +++ src/corelib/itemmodels/qidentityproxymodel_p.h | 1 + src/corelib/itemmodels/qitemselectionmodel.cpp | 2 ++ src/corelib/itemmodels/qitemselectionmodel_p.h | 1 + src/corelib/kernel/qeventloop.cpp | 3 +++ src/corelib/kernel/qeventloop_p.h | 1 + src/corelib/kernel/qtimer.cpp | 3 +++ src/corelib/kernel/qtimer_p.h | 1 + src/corelib/mimetypes/qmimetypeparser.cpp | 6 ++++++ src/corelib/mimetypes/qmimetypeparser_p.h | 3 ++- 16 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/corelib/animation/qpropertyanimation.cpp b/src/corelib/animation/qpropertyanimation.cpp index d461668dbb3..2247c95201c 100644 --- a/src/corelib/animation/qpropertyanimation.cpp +++ b/src/corelib/animation/qpropertyanimation.cpp @@ -58,6 +58,9 @@ QT_BEGIN_NAMESPACE +QPropertyAnimationPrivate::~QPropertyAnimationPrivate() + = default; + void QPropertyAnimationPrivate::updateMetaProperty() { const QObject *target = targetObject.valueBypassingBindings(); diff --git a/src/corelib/animation/qpropertyanimation_p.h b/src/corelib/animation/qpropertyanimation_p.h index 9e41d4dc6d6..ef5534cd9c3 100644 --- a/src/corelib/animation/qpropertyanimation_p.h +++ b/src/corelib/animation/qpropertyanimation_p.h @@ -29,6 +29,7 @@ class QPropertyAnimationPrivate : public QVariantAnimationPrivate Q_DECLARE_PUBLIC(QPropertyAnimation) public: QPropertyAnimationPrivate() : propertyType(0), propertyIndex(-1) { } + ~QPropertyAnimationPrivate() override; void setTargetObjectForwarder(QObject *target) { q_func()->setTargetObject(target); } Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QPropertyAnimationPrivate, QObject *, targetObject, diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp index b4d47aae8f8..d268ab185ac 100644 --- a/src/corelib/animation/qvariantanimation.cpp +++ b/src/corelib/animation/qvariantanimation.cpp @@ -152,6 +152,9 @@ template<> Q_INLINE_TEMPLATE QLineF _q_interpolate(const QLineF &f, const QLineF QVariantAnimationPrivate::QVariantAnimationPrivate() : duration(250), interpolator(&defaultInterpolator) { } +QVariantAnimationPrivate::~QVariantAnimationPrivate() + = default; + void QVariantAnimationPrivate::convertValues(int t) { auto type = QMetaType(t); diff --git a/src/corelib/animation/qvariantanimation_p.h b/src/corelib/animation/qvariantanimation_p.h index 85f996f7bdd..0ac238a882b 100644 --- a/src/corelib/animation/qvariantanimation_p.h +++ b/src/corelib/animation/qvariantanimation_p.h @@ -34,6 +34,7 @@ class QVariantAnimationPrivate : public QAbstractAnimationPrivate public: QVariantAnimationPrivate(); + ~QVariantAnimationPrivate() override; static QVariantAnimationPrivate *get(QVariantAnimation *q) { diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index 70e68be21c1..4c78e1b1bf2 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -32,6 +32,9 @@ static QString appendSlashIfNeeded(const QString &path) return path; } +QAbstractFileEnginePrivate::~QAbstractFileEnginePrivate() + = default; + /*! \class QAbstractFileEngineHandler \inmodule QtCore diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index 5e6232af71a..2a480db9552 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -246,7 +246,7 @@ public: : fileError(QFile::UnspecifiedError) { } - inline virtual ~QAbstractFileEnginePrivate() { } + virtual ~QAbstractFileEnginePrivate(); QFile::FileError fileError; QString errorString; diff --git a/src/corelib/itemmodels/qidentityproxymodel.cpp b/src/corelib/itemmodels/qidentityproxymodel.cpp index da4bc097cb4..069878e1123 100644 --- a/src/corelib/itemmodels/qidentityproxymodel.cpp +++ b/src/corelib/itemmodels/qidentityproxymodel.cpp @@ -8,6 +8,9 @@ QT_BEGIN_NAMESPACE +QIdentityProxyModelPrivate::~QIdentityProxyModelPrivate() + = default; + /*! \since 4.8 \class QIdentityProxyModel diff --git a/src/corelib/itemmodels/qidentityproxymodel_p.h b/src/corelib/itemmodels/qidentityproxymodel_p.h index bb63dd3cd2e..9762110de21 100644 --- a/src/corelib/itemmodels/qidentityproxymodel_p.h +++ b/src/corelib/itemmodels/qidentityproxymodel_p.h @@ -29,6 +29,7 @@ public: QIdentityProxyModelPrivate() { } + ~QIdentityProxyModelPrivate() override; QList layoutChangePersistentIndexes; QModelIndexList proxyIndexes; diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp index 6df60aaf61b..7175c0d3bbe 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -549,6 +549,8 @@ void QItemSelection::split(const QItemSelectionRange &range, } } +QItemSelectionModelPrivate::~QItemSelectionModelPrivate() + = default; void QItemSelectionModelPrivate::initModel(QAbstractItemModel *m) { diff --git a/src/corelib/itemmodels/qitemselectionmodel_p.h b/src/corelib/itemmodels/qitemselectionmodel_p.h index 3d9cd801f7f..6f905c846c7 100644 --- a/src/corelib/itemmodels/qitemselectionmodel_p.h +++ b/src/corelib/itemmodels/qitemselectionmodel_p.h @@ -31,6 +31,7 @@ public: QItemSelectionModelPrivate() : currentCommand(QItemSelectionModel::NoUpdate), tableSelected(false), tableColCount(0), tableRowCount(0) {} + ~QItemSelectionModelPrivate() override; QItemSelection expandSelection(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command) const; diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp index e314a17ff80..2d401e7a425 100644 --- a/src/corelib/kernel/qeventloop.cpp +++ b/src/corelib/kernel/qeventloop.cpp @@ -14,6 +14,9 @@ QT_BEGIN_NAMESPACE +QEventLoopPrivate::~QEventLoopPrivate() + = default; + /*! \class QEventLoop \inmodule QtCore diff --git a/src/corelib/kernel/qeventloop_p.h b/src/corelib/kernel/qeventloop_p.h index 1fcb7a8b811..cb00fba41fc 100644 --- a/src/corelib/kernel/qeventloop_p.h +++ b/src/corelib/kernel/qeventloop_p.h @@ -30,6 +30,7 @@ public: returnCode.storeRelaxed(-1); exit.storeRelaxed(true); } + ~QEventLoopPrivate() override; QAtomicInt quitLockRef; diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 420167c0157..9e4dc7afb40 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -19,6 +19,9 @@ using namespace std::chrono_literals; QT_BEGIN_NAMESPACE +QTimerPrivate::~QTimerPrivate() + = default; + /*! \class QTimer \inmodule QtCore diff --git a/src/corelib/kernel/qtimer_p.h b/src/corelib/kernel/qtimer_p.h index 9347f6c241c..91d6234665f 100644 --- a/src/corelib/kernel/qtimer_p.h +++ b/src/corelib/kernel/qtimer_p.h @@ -35,6 +35,7 @@ public: { intervalDuration.notify(); } + ~QTimerPrivate() override; static constexpr int INV_TIMER = -1; // invalid timer id diff --git a/src/corelib/mimetypes/qmimetypeparser.cpp b/src/corelib/mimetypes/qmimetypeparser.cpp index c3fb80f3b94..1f5a86d11bb 100644 --- a/src/corelib/mimetypes/qmimetypeparser.cpp +++ b/src/corelib/mimetypes/qmimetypeparser.cpp @@ -57,6 +57,9 @@ static const char matchMaskAttributeC[] = "mask"; \sa QMimeTypeParser */ +QMimeTypeParser::~QMimeTypeParser() + = default; + /*! \class QMimeTypeParserBase \inmodule QtCore @@ -69,6 +72,9 @@ static const char matchMaskAttributeC[] = "mask"; \sa QMimeTypeParser */ +QMimeTypeParserBase::~QMimeTypeParserBase() + = default; + /*! \fn virtual bool QMimeTypeParserBase::process(const QMimeType &t, QString *errorMessage) = 0; Overwrite to process the sequence of parsed data diff --git a/src/corelib/mimetypes/qmimetypeparser_p.h b/src/corelib/mimetypes/qmimetypeparser_p.h index d4266ffcc03..34e588ccf85 100644 --- a/src/corelib/mimetypes/qmimetypeparser_p.h +++ b/src/corelib/mimetypes/qmimetypeparser_p.h @@ -47,7 +47,7 @@ class QMimeTypeParserBase public: QMimeTypeParserBase() {} - virtual ~QMimeTypeParserBase() {} + virtual ~QMimeTypeParserBase(); bool parse(QIODevice *dev, const QString &fileName, QString *errorMessage); @@ -86,6 +86,7 @@ class QMimeTypeParser : public QMimeTypeParserBase { public: explicit QMimeTypeParser(QMimeXMLProvider &provider) : m_provider(provider) {} + ~QMimeTypeParser() override; protected: inline bool process(const QMimeTypeXMLData &t, QString *) override