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
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to