seaneveson added a comment.

In http://reviews.llvm.org/D12358#237099, @krememek wrote:

> To get the conservative invalidation that Anna suggests (actually, a little 
> less conservative), I think you can just pass in a two MemRegions as the 
> input to that method and get a new ProgramState with the appropriate regions 
> invalidated.


Thank you for the suggestion. Unfortunately nothing seems to get invalidated 
when I call invalidateRegions, in the following code:

  const StackFrameContext *STC = LCtx->getCurrentStackFrame();
  MemRegionManager &MRMgr = svalBuilder.getRegionManager();
  const MemRegion *Regions[] = {
    MRMgr.getStackLocalsRegion(STC),
    MRMgr.getStackArgumentsRegion(STC),
    MRMgr.getGlobalsRegion()
  };
  ProgramStateRef State;
  State = PrevState->invalidateRegions(Regions, Cond, BlockCount, LCtx, false);

Do you have any suggestions on what I have done wrong?

If there is no simple way to invalidate all three regions I will work on 
implementing something like the following:

In http://reviews.llvm.org/D12358#234975, @krememek wrote:

> A general scheme for widening, which can just be invalidation of anything 
> touched within a loop.  I think that can be done by having an algorithm that 
> does an AST walk, and looks at all variables whose lvalues are taken (used to 
> store values or otherwise get their address using '&') or anything 
> passed-by-reference to a function.  That set of VarDecls can be cached in a 
> side table, mapping ForStmt*'s (other loops as well) to the set of VarDecls 
> that are invalidated.  Those could then be passed to something that does the 
> invalidation using the currently invalidation logic we have in place.  The 
> invalidation logic should also handle checker state, which also needs to get 
> invalidated alongside variable values.



http://reviews.llvm.org/D12358



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to