]> granicus.if.org Git - clang/commit
A series of cleanups/fixes motivated by <rdar://problem/6442306>:
authorTed Kremenek <kremenek@apple.com>
Sat, 13 Dec 2008 19:24:37 +0000 (19:24 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 13 Dec 2008 19:24:37 +0000 (19:24 +0000)
commitabb042f33ea8e6107a7dc8efc51d2ace329f9f48
treea90ad7bccfa3c5604d02c40af6754b619d066511
parent71e38c48609b3502d24a47d39a21f1e73402a0e1
A series of cleanups/fixes motivated by <rdar://problem/6442306>:

GRExprEngine (VisitCast):
- When using StoreManager::CastRegion, always use the state and value it returns to generate the next node.  Failure to do so means that region values returned that don't require the state to be modified will get ignored.

MemRegion:
- Tighten the interface for ElementRegion.  Now ElementRegion can only be created with a super region that is a 'TypedRegion' instead of any MemRegion.  Code in BasicStoreManager/RegionStoreManager already assumed this, but it would result in a dynamic assertion check (and crash) rather than just having the compiler forbid the construction of such regions.
- Added ElementRegion::getArrayRegion() to return the 'typed version' of an ElementRegion's super region.
- Removed bogus assertion in ElementRegion::getType() that assumed that the super region was an AnonTypedRegion.  All that matters is that it is a TypedRegion, which is now true all the time by design.

BasicStore:
- Modified getLValueElement() to check if the 'array' region is a TypedRegion before creating an ElementRegion.  This conforms to the updated interface for ElementRegion.

RegionStore:
- In ArrayToPointer() gracefully handle things we don't reason about, and only create an ElementRegion if the array region is indeed a TypedRegion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60990 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Analysis/PathSensitive/MemRegion.h
lib/Analysis/BasicStore.cpp
lib/Analysis/GRExprEngine.cpp
lib/Analysis/MemRegion.cpp
lib/Analysis/RegionStore.cpp
test/Analysis/rdar-6442306-1.m [new file with mode: 0644]