[analyzer] Tighten up safety in the use of lazy bindings.
authorJordan Rose <jordan_rose@apple.com>
Thu, 21 Feb 2013 01:34:51 +0000 (01:34 +0000)
committerJordan Rose <jordan_rose@apple.com>
Thu, 21 Feb 2013 01:34:51 +0000 (01:34 +0000)
commitd1c7cf26ae622ed911ee6d746313dfbedcdfd012
treed4f1c17a715495b82fea703688914dcc812e814a
parenta6db9339797e612cbd564be37a8356752c33d320
[analyzer] Tighten up safety in the use of lazy bindings.

- When deciding if we can reuse a lazy binding, make sure to check if there
  are additional bindings in the sub-region.
- When reading from a lazy binding, don't accidentally strip off casts or
  base object regions. This slows down lazy binding reading a bit but is
  necessary for type sanity when treating one class as another.

A bit of minor refactoring allowed these two checks to be unified in a nice
early-return-using helper function.

<rdar://problem/13239840>

llvm-svn: 175703
clang/lib/StaticAnalyzer/Core/RegionStore.cpp
clang/test/Analysis/array-struct-region.c
clang/test/Analysis/derived-to-base.cpp