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

Reply via email to