]> granicus.if.org Git - clang/commit
[analyzer] Don't strip CXXBaseObjectRegions when checking dynamic_casts.
authorJordan Rose <jordan_rose@apple.com>
Mon, 13 Aug 2012 22:11:34 +0000 (22:11 +0000)
committerJordan Rose <jordan_rose@apple.com>
Mon, 13 Aug 2012 22:11:34 +0000 (22:11 +0000)
commitb11a3ada9a22e146c6edd33bcc6301e221fedd7a
tree24ec1f87444dfaaf1eb5fb09daa5cb040b9355d3
parent58d33ad9c83f1195a7db544e4b41daa019aaa767
[analyzer] Don't strip CXXBaseObjectRegions when checking dynamic_casts.

...and /do/ strip CXXBaseObjectRegions when casting to a virtual base class.

This allows us to enforce the invariant that a CXXBaseObjectRegion can always
provide an offset for its base region if its base region has a known class
type, by only allowing virtual bases and direct non-virtual bases to form
CXXBaseObjectRegions.

This does mean some slight problems for our modeling of dynamic_cast, which
needs to be resolved by finding a path from the current region to the class
we're trying to cast to.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161797 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
lib/StaticAnalyzer/Core/CallEvent.cpp
lib/StaticAnalyzer/Core/MemRegion.cpp
lib/StaticAnalyzer/Core/RegionStore.cpp
lib/StaticAnalyzer/Core/SVals.cpp
test/Analysis/derived-to-base.cpp
test/Analysis/dynamic-cast.cpp