summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp
diff options
context:
space:
mode:
authorArtem Dergachev <artem.dergachev@gmail.com>2017-10-10 11:50:45 +0000
committerArtem Dergachev <artem.dergachev@gmail.com>2017-10-10 11:50:45 +0000
commitc06bb16f1c3f08817264e21da2e09d29adc45880 (patch)
treef6d69b357e612bcf9e26d0f14d92db6297d4d5f5 /clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp
parent5b0f885691554eb4cbe4a308266bbc1410dded5f (diff)
downloadbcm5719-llvm-c06bb16f1c3f08817264e21da2e09d29adc45880.tar.gz
bcm5719-llvm-c06bb16f1c3f08817264e21da2e09d29adc45880.zip
[analyzer] MisusedMovedObject: Add printState() method for self-debugging.
This method injects additional information into program state dumps, describing which objects have been moved from. Differential Revision: https://reviews.llvm.org/D31541 llvm-svn: 315300
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp
index decc552e121..70da66dba47 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/MisusedMovedObjectChecker.cpp
@@ -56,6 +56,8 @@ public:
ArrayRef<const MemRegion *> ExplicitRegions,
ArrayRef<const MemRegion *> Regions,
const LocationContext *LCtx, const CallEvent *Call) const;
+ void printState(raw_ostream &Out, ProgramStateRef State,
+ const char *NL, const char *Sep) const override;
private:
class MovedBugVisitor : public BugReporterVisitorImpl<MovedBugVisitor> {
@@ -476,6 +478,25 @@ ProgramStateRef MisusedMovedObjectChecker::checkRegionChanges(
return State;
}
+void MisusedMovedObjectChecker::printState(raw_ostream &Out,
+ ProgramStateRef State,
+ const char *NL,
+ const char *Sep) const {
+
+ TrackedRegionMapTy RS = State->get<TrackedRegionMap>();
+
+ if (!RS.isEmpty()) {
+ Out << Sep << "Moved-from objects :" << NL;
+ for (auto I: RS) {
+ I.first->dumpToStream(Out);
+ if (I.second.isMoved())
+ Out << ": moved";
+ else
+ Out << ": moved and reported";
+ Out << NL;
+ }
+ }
+}
void ento::registerMisusedMovedObjectChecker(CheckerManager &mgr) {
mgr.registerChecker<MisusedMovedObjectChecker>();
}
OpenPOWER on IntegriCloud