[PATCH] D77229: [Analyzer][WIP] Avoid handling of LazyCompundVals in IteratorModeling

Artem Dergachev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 8 07:34:26 PDT 2020


NoQ added a comment.

> I am totally lost here. What is wrong?

Looks like a bug. Every constructor and every function that returns an object by value should have a construction context.



================
Comment at: clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp:231-235
+        if (dyn_cast_or_null<InitListExpr>(LCtx->getParentMap().getParent(E))) {
+          MemRegionManager &MRMgr = getSValBuilder().getRegionManager();
+          return std::make_pair(
+              State, loc::MemRegionVal(MRMgr.getCXXTempObjectRegion(E, LCtx)));
+        }
----------------
baloghadamsoftware wrote:
> baloghadamsoftware wrote:
> > NoQ wrote:
> > > baloghadamsoftware wrote:
> > > > Did you mean this piece of code? It returns `&temp_object{struct simple_iterator_base, S44016}`. Is this correct? If so, I will factor out this code and put it into a common function to be used by both this function and the original one.
> > > No, this one's for members, we've been talking about base classes.
> > Oh yes, I see it now. But which one then? Maybe line 585? Or the whole `switch` expression? Sorry, I am not sure I fully understand this piece of code.
> Now it returns `&Base{SymRegion{reg_$0<struct simple_derived_iterator * this>},simple_iterator_base}`. Is it correct?
I don't know. What code are you analyzing in this thread of discussion?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77229/new/

https://reviews.llvm.org/D77229





More information about the cfe-commits mailing list