diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-03-12 04:08:07 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-03-12 04:08:07 +0000 |
commit | 7084da3e944fdfaa922dda0d57c0fe4cb7b88178 (patch) | |
tree | 56792750a7e8eee2dd85614c7055f600b9a7d69e /lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp | |
parent | dd54de85cd98b85a79857723bcf3d7d95073a2a0 (diff) |
Don't have side-effects (or rather non-trivial computation) in StringSwitch "cases."
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127528 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp b/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp index add9751d65..1925131632 100644 --- a/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp +++ b/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. |