NoQ added a comment. Hello, thanks for another useful checker! I make quite a few of these mistakes regularly.
This one looks similar to the `IteratorPastEnd` checker, so much that i'd definitely advice re-using some code. At the very least, functions like `isIterator()` should definitely deserve a header somewhere in `include/clang/StaticAnalyzer/Checkers`. Also, did you consider merging these checkers together into one file? Just because they have so much in common. The usual stuff: do you already have any quality statistics, eg. how many warnings did you see emitted by this checker, how many of them are true/false positives. With that, better warning messages, and a bug reporter visitor to highlight the origin of the misplaced iterator, i think this checker should be enabled by default (go out of alpha). ================ Comment at: lib/StaticAnalyzer/Checkers/MismatchedIteratorChecker.cpp:311 + +void MismatchedIteratorChecker::checkPostStmt(const DeclStmt *DS, + CheckerContext &C) const { ---------------- Hmm. Now i suspect that the `checkBind()` callback should have covered this, both here and in the previous checker. Did you try using that instead, and see if other callbacks are covered by `checkBind()` as well? ================ Comment at: lib/StaticAnalyzer/Checkers/MismatchedIteratorChecker.cpp:356 + for (auto I = SymbolMap.begin(), E = SymbolMap.end(); I != E; ++I) { + if (SR.isDead(I->first)) { + State = State->remove<IteratorSymbolMap>(I->first); ---------------- I'd consider `!isLive()` here due to, uhm, //subtle differences// we currently have between these two (there's a hard-to-fix bug that causes some symbols to never make it to the dead set, see D18860). https://reviews.llvm.org/D29419 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits