wangxindsb marked 3 inline comments as done.
wangxindsb added inline comments.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:29
namespace {
+enum class ObjectState : bool { CtorCalled, DtorCalled };
+} // end namespace
----------------
NoQ wrote:
> Please remind me what was wrong with ascending over `StackFrameContext`s to
> see if we're inside a constructor or destructor call? Why did we need a state
> trait here? Was it too hard to obtain this-values? (Not sure if there's time
> to fix this, but it might be worth it to leave a FIXME around).
I have implement this method before, the code is on this link, [[
https://github.com/wangxindsb/VirtualCallChecker/blob/master/VirtualCallChecker-fullstack.cpp
| virtualcallchecker using stackframe]]. I thought it was harder and slower
than the state trait, so I gave up this method. Also, I thought this method
maybe hard to add visitor. I will work on this soon.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:110
+ auto ThiSVal =
+ State->getSVal(SVB.getCXXThis(MD, LCtx->getCurrentStackFrame()));
+ const MemRegion *Reg = ThiSVal.getAsRegion();
----------------
NoQ wrote:
> I don't think this is working. CXXThisRegion is never a region of a C++
> object; it's the segment of the stack where the pointer is passed, you need
> to dereference its value to get the actual object region.
>
> Probably tests for the visitor might make things more clear.
```
class Y {
public:
virtual void foobar();
void fooY() {
F f1;
foobar();
}
Y() {
fooY();
}
};
```
I thought this test is for this situation. If the visitor is correct, it will
issued "Called from this constructor 'Y'", else it will issued "Called from
this constructor 'F'".
https://reviews.llvm.org/D34275
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits