[cfe-commits] r59232 - /cfe/trunk/lib/Analysis/GRExprEngine.cpp

Ted Kremenek kremenek at apple.com
Sat Nov 15 19:20:24 PST 2008

First, this patch looks great!  Please apply.  Comments on your other  
points below.

On Nov 15, 2008, at 1:36 AM, Zhongxing Xu wrote:

> These quite complex cases are introduced by the C language property  
> that allows us to have different views on the same chunk of raw  
> memory. We intend to tackle these cases by adding another layer on  
> top of a raw memory region, i.e. the AnonTypedRegion. But it is not  
> enough to know what the view of a chunk of raw memory is in the  
> current state. To flag the above error, we also need to know besides  
> the current view of the memory, what other views of the memory  
> exist? But from an AnonTypedRegion we can only get its super region,  
> but no other AnonTypedRegion derived from that super region.

That's correct.  The back-mapping from super regions to sub-regions is  
not something enforced by the region model.  It's up to a particular  
StoreManager to maintain this information if it so desires.

> To get this knowledge, I propose to add a RegionView and a  
> RegionViewMap information. A RegionView is currently designed to be  
> a ImmutableList of MemRegions, which collects the current view on a  
> memory region. The RegionViewMap maps a region to its view. In code:
> typedef llvm::ImmutableList<MemRegion*> RegionViewTy;
> typedef llvm::ImmutableMap<MemRegion*, RegionViewTy> RegionViewMapTy;
> Later if necessary we can extend the RegionView into a real class to  
> hold other information. With RegionViewMap, we can get all of the  
> views of a memory region.

These seem great to me, but they are a detail of how a particular  
StoreManager implements Stores.  These should probably be buried  
within StoreManager.  We can either use the GDM to host these or have  
RegionStore manage a foldingset for its own particular store objects  
(where each store object has a RegionView, a mapping from vardecls to  
regions, etc.).

> One side problem is that I cannot make the MemRegion* in the  
> ImmutableList const. If I did that, I would get compile error,  
> related to FoldingSet Profile() overloading.

We should enhance ImmutableList to not have this limitation.

More information about the cfe-commits mailing list