From 3b46f07ffa2e471eaf0f3cca5f18952044db32a6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 5 Apr 2022 13:36:42 -0700 Subject: [PATCH] QObjectPrivate: mark inline functions not meant to be used elsewhere The `inline` keyword does not control inlining, as we all know (use Q_ALWAYS_INLINE to force inlining, if required). However, it does control the emission of the out-of-line copy of an inline function, if the compiler did inline it where it got used: with the keyword, no copy is required, which is our objective here. Furthermore, we compile with -fvisibility-inlines-hidden with GCC-compatible compilers (all but MSVC and Integrity's), which means those functions will never be in the ABI of QtCore: they'll either have been inlined with no out-of-line copy, or that out-of-line emission is hidden. Change-Id: If2e0f4b2190341ebaa31fffd16e31584561669f2 Reviewed-by: Lars Knoll Reviewed-by: Marc Mutz --- src/corelib/kernel/qobject.cpp | 10 +++++----- src/corelib/kernel/qobject_p.h | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index af87c7d0e3b..0cc5244b652 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -516,7 +516,7 @@ QObjectList QObjectPrivate::senderList() const return returnValue; } -void QObjectPrivate::ensureConnectionData() +inline void QObjectPrivate::ensureConnectionData() { if (connections.loadRelaxed()) return; @@ -535,7 +535,7 @@ void QObjectPrivate::ensureConnectionData() Will also add the connection in the sender's list of the receiver. */ -void QObjectPrivate::addConnection(int signal, Connection *c) +inline void QObjectPrivate::addConnection(int signal, Connection *c) { Q_ASSERT(c->sender == q_ptr); ensureConnectionData(); @@ -657,7 +657,7 @@ void QObjectPrivate::ConnectionData::cleanOrphanedConnectionsImpl(QObject *sende } } -void QObjectPrivate::ConnectionData::deleteOrphaned(QObjectPrivate::ConnectionOrSignalVector *o) +inline void QObjectPrivate::ConnectionData::deleteOrphaned(QObjectPrivate::ConnectionOrSignalVector *o) { while (o) { QObjectPrivate::ConnectionOrSignalVector *next = nullptr; @@ -1345,7 +1345,7 @@ QObject::~QObject() d->setParent_helper(nullptr); } -QObjectPrivate::Connection::~Connection() +inline QObjectPrivate::Connection::~Connection() { if (ownArgumentTypes) { const int *v = argumentTypes.loadRelaxed(); @@ -5532,7 +5532,7 @@ bool QObjectPrivate::disconnect(const QObject *sender, int signal_index, const Q \internal \threadsafe */ -bool QObjectPrivate::disconnect(QObjectPrivate::Connection *c) +inline bool QObjectPrivate::disconnect(QObjectPrivate::Connection *c) { if (!c) return false; diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index ed32a904978..5de0e53d4bc 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -173,7 +173,7 @@ public: QObjectList receiverList(const char *signal) const; QObjectList senderList() const; - void addConnection(int signal, Connection *c); + inline void addConnection(int signal, Connection *c); static QObjectPrivate *get(QObject *o) { return o->d_func(); } static const QObjectPrivate *get(const QObject *o) { return o->d_func(); } @@ -211,9 +211,9 @@ public: static bool disconnect(const QObject *sender, int signal_index, void **slot); static bool disconnect(const QObject *sender, int signal_index, const QObject *receiver, void **slot); - static bool disconnect(Connection *c); + static inline bool disconnect(Connection *c); - void ensureConnectionData(); + inline void ensureConnectionData(); virtual std::string flagsForDumping() const;