Fix reference on temperary value

Old code at Context::lookupReference took via Context::ptr()
a temporary QSharedPointer as an argument into a reference
member which is deleted just after ReferenceContext is constructed
- changing that to a general member copies this temporary QSharedPointer
and fixes the problem which was there since always and that this was not
crashing before was just luck.

class ReferenceContext
{
public:
    ReferenceContext(const ContextPtr &context);
private:
    const ContextPtr &m_context;
};

QWeakPointer<const Context> _ptr;

ContextPtr Context::ptr() const
{
    return _ptr.toStrongRef();
}

const Value *Context::lookupReference(const Value *value) const
{
    ReferenceContext refContext(ptr());
    return refContext.lookupReference(value);
}

Task-number: QTCREATORBUG-21510
Change-Id: Ic49a0597763fb8be65feca6f24fec105d531d6ab
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
(cherry picked from commit 4d74cbb945)
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tim Jenssen
2018-11-15 19:21:12 +01:00
committed by Eike Ziller
parent 257b4a0325
commit 9401c98097

View File

@@ -91,7 +91,7 @@ public:
operator const ContextPtr &() const;
private:
const ContextPtr &m_context;
const ContextPtr m_context;
QList<const Reference *> m_references;
};