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

Balogh, Ádám via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 7 12:32:21 PDT 2020


baloghadamsoftware marked an inline comment as done.
baloghadamsoftware added a comment.

In D77229#1967269 <https://reviews.llvm.org/D77229#1967269>, @NoQ wrote:

> In D77229#1966888 <https://reviews.llvm.org/D77229#1966888>, @baloghadamsoftware wrote:
>
> > Not so strange, of course, they are destructed before the `postCall()` as they should be, but the question still remains: how to keep them alive for post-checking the call, but not forever.
>
>
> Nope, temporaries are destroyed at the end of the full-expression, which is much later than `PostCall`.
>
> What code are you debugging?


OK, maybe I phrased it incorrectly. It is not destroyed, but not "live" anymore. Thus `isLive()` returns false. I am trying to debug `vector_insert_begin()` (line 954).



================
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)));
+        }
----------------
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.


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

https://reviews.llvm.org/D77229





More information about the cfe-commits mailing list