Charusso added inline comments.
================ Comment at: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp:835-842 // First, find when we processed the statement. do { if (auto CEE = Node->getLocationAs<CallExitEnd>()) if (CEE->getCalleeContext()->getCallSite() == S) break; - if (auto SP = Node->getLocationAs<StmtPoint>()) - if (SP->getStmt() == S) - break; Node = Node->getFirstPred(); ---------------- NoQ wrote: > This iteration may now take us straight to the root of the graph. I don't > think it's supposed to be that slow; i think it's supposed to only skip > within maybe a full-expression at most. > > Which statements in the AST are getting peeled off here that weren't before? > Which statements are supposed to get peeled off? > > Might it be that we should simply add one more case to `peelOffOuterExpr()` > or something like that? We have the following sequence in the loop: ``` "stmt_kind": "DeclStmt", "stmt_point_kind": "PostStmt" "stmt_kind": "DeclStmt", "stmt_point_kind": "PostStore" "stmt_kind": "DeclStmt", "stmt_point_kind": "PreStmtPurgeDeadSymbols" "pretty": "S *s = new S [10];" "stmt_kind": "CXXNewExpr", "stmt_point_kind": "PostStmt" "stmt_kind": "CXXNewExpr", "stmt_point_kind": "PreStmtPurgeDeadSymbols" "pretty": "new S [10]" "stmt_kind": "CXXConstructExpr", "stmt_point_kind": "PostStmt" "stmt_kind": "CXXConstructExpr", "stmt_point_kind": "PreStmt" "stmt_kind": "CXXConstructExpr", "stmt_point_kind": "PreStmtPurgeDeadSymbols" "pretty": null "kind": "CallExitEnd" - found the ReturnStmt, all good. ``` This ReturnVisitor is totally ProgramPoint-based and I wanted to be super generic. Do you know about more problematic constructing-object? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D62926/new/ https://reviews.llvm.org/D62926 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits