From 3af20bd8eb8c75017c5d6d138d7c42914ee5bee3 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 Pick-to: 6.8 Change-Id: I8c864c0d2ed3ca20d20d5cfc356290eb529edf6c Reviewed-by: Alexey Edelev --- 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 a3fa9c00f86..de228d50f49 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 704b0c94c55..13168479304 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -246,7 +246,7 @@ public: : fileError(QFile::UnspecifiedError), q_ptr(q) { } - 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 57ad5019a44..d4fbfc2cb98 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -592,6 +592,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 05501c282ba..e3b4b0ec36d 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