diff options
-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. |