Fix build with GCC12: apparently incorrect use-after-free warning
GCC12 is complaining about a use-after-free here, but I don't see it. In member function ‘void QQmlContextData::release() const’, inlined from ‘QQmlRefPointer<T>::~QQmlRefPointer() [with T = QQmlContextData]’ at ftw/qqmlrefcount_p.h:181:22, inlined from ‘bool {anonymous}::contextHasNoExtensions(const QQmlRefPointer<QQmlContextData>&)’ at qqmlpropertycache.cpp:658:29, inlined from ‘const QQmlPropertyData* QQmlPropertyCache::findProperty(QLinkedStringMultiHash<std::pair<int, QQmlPropertyData*> >::ConstIterator, const QQmlVMEMetaObject*, const QQmlRefPointer<QQmlContextData>&) const’ at qqmlpropertycache.cpp:683:56: qqmlcontextdata_p.h:88:34: error: pointer used after ‘void operator delete(void*, std::size_t)’ [-Werror=use-after-free] 88 | void release() const { if (--m_refCount == 0) delete this; } | ^~~~~~~~~~ In member function ‘void QQmlContextData::release() const’, inlined from ‘QQmlRefPointer<T>::~QQmlRefPointer() [with T = QQmlContextData]’ at ftw/qqmlrefcount_p.h:181:22, inlined from ‘bool {anonymous}::contextHasNoExtensions(const QQmlRefPointer<QQmlContextData>&)’ at qqmlpropertycache.cpp:658:51, inlined from ‘const QQmlPropertyData* QQmlPropertyCache::findProperty(QLinkedStringMultiHash<std::pair<int, QQmlPropertyData*> >::ConstIterator, const QQmlVMEMetaObject*, const QQmlRefPointer<QQmlContextData>&) const’ at qqmlpropertycache.cpp:683:56: qqmlcontextdata_p.h:88:58: note: call to ‘void operator delete(void*, std::size_t)’ here 88 | void release() const { if (--m_refCount == 0) delete this; } | ^~~~ Pick-to: 6.2 6.3 Change-Id: If05aeeb7176e4f13af9afffd16e84d54de676bc2 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
parent
5680f42a97
commit
cafc60c3bf
|
@ -659,7 +659,8 @@ inline bool contextHasNoExtensions(const QQmlRefPointer<QQmlContextData> &contex
|
|||
{
|
||||
// This context has no extension if its parent is the engine's rootContext,
|
||||
// which has children but no imports
|
||||
return (!context->parent() || !context->parent()->imports());
|
||||
const QQmlRefPointer<QQmlContextData> parent = context->parent();
|
||||
return (!parent || !parent->imports());
|
||||
}
|
||||
|
||||
inline int maximumIndexForProperty(const QQmlPropertyData *prop, const int methodCount, const int signalCount, const int propertyCount)
|
||||
|
|
Loading…
Reference in New Issue