xazax.hun requested changes to this revision.
xazax.hun added inline comments.
This revision now requires changes to proceed.


================
Comment at: 
clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h:176
+  const ExplodedNode *Origin;
+  CFGControlDependencyTree ControlDepTree;
+  llvm::SmallSet<const CFGBlock *, 32> VisitedBlocks;
----------------
I think we should make clear that this visitor only operates within one 
function and does not track controll dependencies across functions. 


================
Comment at: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp:680
 
+} // end of anonymous namespace
+
----------------
What was the reason of adding these begin/ends? I prefer to keep such 
refactorings separate, also it might be controversial whether this change is 
desired.


================
Comment at: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp:1863-1864
+
+    case Stmt::ObjCForCollectionStmtClass:
+      return cast<ObjCForCollectionStmt>(S)->getCollection();
+
----------------
NoQ wrote:
> Szelethus wrote:
> > @NoQ Any feelings on this?
> This makes some sense in the long run but i think you should give up here for 
> now. Unlike `CXXForRangeStmt`, its Objective-C counterpart doesn't mock up 
> the AST that would have made it look like a regular for-loop, so there just 
> isn't an AST node that would represent the part of it that corresponds to 
> "`__begin != __end`".
> 
> Even in the C++ case, i'm not sure your current behavior would make much 
> sense. We should probably delegate this work to a checker that knows how 
> collections work and what makes them empty or have a certain size, something 
> similar to what the `IteratorChecker` seems to be becoming :)
> 
> Should we give mark the report as invalid when we give up here? I've no idea, 
> i guess i'll have to gather more empirical evidence on that.
I vaguely recall some problem with the results of getTerminatorStmt for logical 
operators like &&. I believe what we really want is the last expression we 
evaluated in the basic block which will be the last Stmt of the basic block. So 
if we can settle with the last stmt we can get rid of this code. 


================
Comment at: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp:1899-1901
+  CFGBlock *NB = GetRelevantBlock(N);
+  if (!VisitedBlocks.insert(NB).second)
+    return nullptr;
----------------
NoQ wrote:
> I didn't really understand this part.
I guess detecting control depdendency only makes sense for the last statement 
of the basic block (which is the first one we see in the visitor order). But 
instead of maintaining a state with the visited nodes we could also check if 
the statement is the last one of its basic block. 


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62883/new/

https://reviews.llvm.org/D62883



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

Reply via email to