[PATCH] D62926: [analyzer] ReturnVisitor: Bypass constructing objects to see inlined calls
Csaba Dabis via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 6 03:46:07 PDT 2019
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
More information about the cfe-commits
mailing list