summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-03-12 04:08:07 +0000
committerTed Kremenek <kremenek@apple.com>2011-03-12 04:08:07 +0000
commite5a89ac52aa34e54823462c2c6baaa98dad6c211 (patch)
treea8b4e6b85f3836070e8ba78788c21cdcb527f52f /clang/lib/StaticAnalyzer
parent47f660aeafa010257e8b5f6952ae0ae896084757 (diff)
downloadbcm5719-llvm-e5a89ac52aa34e54823462c2c6baaa98dad6c211.tar.gz
bcm5719-llvm-e5a89ac52aa34e54823462c2c6baaa98dad6c211.zip
Don't have side-effects (or rather non-trivial computation) in StringSwitch "cases."
llvm-svn: 127528
Diffstat (limited to 'clang/lib/StaticAnalyzer')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp
index add9751d652..1925131632b 100644
--- a/clang/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp
@@ -282,12 +282,15 @@ const GRState *IteratorsChecker::handleAssign(const GRState *state,
// Finally, see if it is one of the calls that will create
// a valid iterator and mark it if so, else mark as Unknown.
llvm::StringRef mName = ME->getMemberDecl()->getName();
- return llvm::StringSwitch<const GRState*>(mName)
- .Cases("begin", "insert", "erase",
- state->set<IteratorState>(MR, RefState::getBeginValid(IMR)))
- .Case("end",
- state->set<IteratorState>(MR, RefState::getEndValid(IMR)))
- .Default(state->set<IteratorState>(MR, RefState::getUnknown()));
+
+ if (llvm::StringSwitch<bool>(mName)
+ .Cases("begin", "insert", "erase", true).Default(false)) {
+ return state->set<IteratorState>(MR, RefState::getBeginValid(IMR));
+ }
+ if (mName == "end")
+ return state->set<IteratorState>(MR, RefState::getEndValid(IMR));
+
+ return state->set<IteratorState>(MR, RefState::getUnknown());
}
}
// Handle straight copy from another iterator.
OpenPOWER on IntegriCloud