NoQ added inline comments.
Herald added subscribers: a.sidorin, rnkovacs, szepet.


================
Comment at: lib/StaticAnalyzer/Checkers/IteratorChecker.cpp:605
+  if (Pos && !Pos->isValid()) {
+    // If I do not put a tag here, some invalidation tests will fail
+    static CheckerProgramPointTag Tag("InvalidatedIteratorChecker",
----------------
This needs investigation, because it may be nasty.

`generateNonFatalErrorNode()` returns null when the exact same non-fatal error 
node, also produced by the iterator checker with the exact same program state 
and exact same program point and exact same tag on the program point already 
exists. As far as i understand, the only difference your tag makes is that the 
tag is now different, so it is not merged with the existing node. However, it 
is worth it to try to find out why the node gets merged at all.

This may be caused by an accidental state split. For example, if you are 
calling `generateNonFatalErrorNode()` twice in the same checker callback 
without chaining them together (passing node returned by one as an argument to 
another), this in fact splits states. I'm not immediately seeing such places in 
the code - you seem to be aware of this problem and avoiding it well. But 
still, looking at the topology of the exploded graph in the failing test should 
help finding out what is going on.


https://reviews.llvm.org/D32747



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to