[cfe-dev] Static Analyzer - tracking values through indirection?
Gábor Kozár
kozargabor at gmail.com
Tue Apr 30 09:50:17 PDT 2013
Hi,
I need to write a checker to make sure that the state of the transaction is
checked after commit. This is working fine is basic cases, but it seems to
fail when I introduce any level of indirection. For example, consider the
following:
class TransactionPtr
{
public:
TransactionPtr(DummyTransaction& tr) : m_tr(tr) {}
DummyTransaction* getTransaction() { return &m_tr; }
private:
DummyTransaction& m_tr;
};
int main(int argc, char* argv[])
{
DummyTransaction tr;
TransactionPtr trp(tr);
trp.getTransaction()->commit();
if(tr.isSuccessful()) return 0;
else return 1;
}
Running my checker on this reveals that the analyzer has no idea of the
connection between trp.m_tr and tr, and so it fails to detect an issue with
the above code.
I also tried checkBind(), but it is not called in relation to the
TransactionPtr trp(tr); line.
Is this a known limitation, or am I missing something here? I also tried
getBaseRegion(), getSuperRegion(), which didn't lead anywhere.
getMemorySpace() on the other hand points to UnknownSpaceRegion.
Thanks!
Gabor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130430/405335e9/attachment.html>
More information about the cfe-dev
mailing list