dcoughlin added a comment.

In this case, I would be fine with some sort of AbstractStorageMemoryRegion 
that meant "here is a memory region and somewhere reachable from here exists 
another region of type T". Or even multiple regions with different identifiers. 
This wouldn't specify how the memory is reachable, but it would allow for 
transfer functions to get at those regions and it would allow for invalidation.

For std::initializer_list this reachable region would the region for the 
backing array and the transfer functions for begin() and end() yield the 
beginning and end element regions for it.

In my view this differs from ghost variables in that (1) this storage does 
actually exist (it is just a library implementation detail where that storage 
lives) and (2) it is perfectly valid for a pointer into that storage to be 
returned and for another part of the program to read or write from that 
storage. (Well, in this case just read since it is allowed to be read-only 
memory).

What I'm not OK with is modeling abstract analysis state (for example, the 
count of a NSMutableArray or the typestate of a file handle) as a value stored 
in some ginned up region in the store. This takes an easy problem that the 
analyzer does well at (modeling typestate) and turns it into a hard one that 
the analyzer is bad at (reasoning about the contents of the heap).

I think the key criterion here is: "is the region accessible from outside the 
library". That is, does the library expose the region as a pointer that can be 
read to or written from in the client program? If so, then it makes sense for 
this to be in the store: we are modeling reachable storage as storage. But if 
we're just modeling arbitrary analysis facts that need to be invalidated when a 
pointer escapes then we shouldn't try to gin up storage for them just to get 
invalidation for free.


https://reviews.llvm.org/D35216



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

Reply via email to