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 | e5a89ac52aa34e54823462c2c6baaa98dad6c211 (patch) | |
| tree | a8b4e6b85f3836070e8ba78788c21cdcb527f52f /clang/lib/StaticAnalyzer | |
| parent | 47f660aeafa010257e8b5f6952ae0ae896084757 (diff) | |
| download | bcm5719-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.cpp | 15 |
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. |

