diff options
author | Jordan Rose <jordan_rose@apple.com> | 2013-02-21 01:34:51 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2013-02-21 01:34:51 +0000 |
commit | 11f0cae4bf4f62dcc706d33c1f795d460cd64816 (patch) | |
tree | 7053818473975fee08a29ee0724bbbcac315c481 /test/Analysis/array-struct-region.c | |
parent | 943f909ba72a1c9351dd421cac1413d303a719f1 (diff) |
[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>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175703 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/array-struct-region.c')
-rw-r--r-- | test/Analysis/array-struct-region.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/test/Analysis/array-struct-region.c b/test/Analysis/array-struct-region.c index dfb4cf13a9..6817124afe 100644 --- a/test/Analysis/array-struct-region.c +++ b/test/Analysis/array-struct-region.c @@ -285,6 +285,13 @@ void testArrayStructCopy() { clang_analyzer_eval(s3.data[0] == 'a'); // expected-warning{{TRUE}} clang_analyzer_eval(s3.data[1] == 'b'); // expected-warning{{TRUE}} clang_analyzer_eval(s3.data[2] == 'c'); // expected-warning{{TRUE}} + + s3.data[0] = 'z'; + ShortString s4 = s3; + + clang_analyzer_eval(s4.data[0] == 'z'); // expected-warning{{TRUE}} + clang_analyzer_eval(s4.data[1] == 'b'); // expected-warning{{TRUE}} + clang_analyzer_eval(s4.data[2] == 'c'); // expected-warning{{TRUE}} } void testArrayStructCopyNested() { |