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 d461668dbb..2247c95201 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 9e41d4dc6d..ef5534cd9c 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 b4d47aae8f..d268ab185a 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 85f996f7bd..0ac238a882 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 70e68be21c..4c78e1b1bf 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 5e6232af71..2a480db955 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 da4bc097cb..069878e112 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 bb63dd3cd2..9762110de2 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 6df60aaf61..7175c0d3bb 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 3d9cd801f7..6f905c846c 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 e314a17ff8..2d401e7a42 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 1fcb7a8b81..cb00fba41f 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 420167c015..9e4dc7afb4 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 9347f6c241..91d6234665 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 c3fb80f3b9..1f5a86d11b 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 d4266ffcc0..34e588ccf8 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