diff options
author | Artem Dergachev <artem.dergachev@gmail.com> | 2016-04-25 14:44:25 +0000 |
---|---|---|
committer | Artem Dergachev <artem.dergachev@gmail.com> | 2016-04-25 14:44:25 +0000 |
commit | 70247e69b1f1fde7f11b6cd81bc50162f9b79ab2 (patch) | |
tree | c562c6bc4b43624c42b4ecbb8c562048ec2ffa52 /clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp | |
parent | dd215236530c9f643220f1c6e928dd39254a7b3d (diff) | |
download | bcm5719-llvm-70247e69b1f1fde7f11b6cd81bc50162f9b79ab2.tar.gz bcm5719-llvm-70247e69b1f1fde7f11b6cd81bc50162f9b79ab2.zip |
[analyzer] Let TK_PreserveContents span across the whole base region.
If an address of a field is passed through a const pointer,
the whole structure's base region should receive the
TK_PreserveContents trait and avoid invalidation.
Additionally, include a few FIXME tests shown up during testing.
Differential Revision: http://reviews.llvm.org/D19057
llvm-svn: 267413
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp index 5130dd610ae..ff4922dac9a 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp @@ -920,7 +920,7 @@ ProgramStateRef CStringChecker::InvalidateBuffer(CheckerContext &C, // Invalidate and escape only indirect regions accessible through the source // buffer. if (IsSourceBuffer) { - ITraits.setTrait(R, + ITraits.setTrait(R->getBaseRegion(), RegionAndSymbolInvalidationTraits::TK_PreserveContents); ITraits.setTrait(R, RegionAndSymbolInvalidationTraits::TK_SuppressEscape); CausesPointerEscape = true; |