vsavchenko added inline comments.

================
Comment at: clang/lib/StaticAnalyzer/Core/BugSuppression.cpp:70
+
+class CacheInitializer : public RecursiveASTVisitor<CacheInitializer> {
+public:
----------------
NoQ wrote:
> vsavchenko wrote:
> > NoQ wrote:
> > > A recursive visitor would cause you to visit nested declarations (eg., 
> > > lambdas, or methods of nested classes) multiple times. Is this necessary? 
> > > A plain old `ConstStmtVisitor` that's taught to visit child statements 
> > > recursively could easily avoid that. That's probably cheap though.
> > I don't see how I can easily use `StmtVisitor`s without A LOT OF 
> > boilerplate code that will essentially produce a `RecursiveASTVisitor` (it 
> > is very possible that I just don't know about some trick).  I guess we can 
> > add some optimization if needed, but I never had performance problems with 
> > recursive visitors.
> The typical idiom is as follows:
> ```lang=c++
> void VisitChildren(const Stmt *S) {
>   // Not a visitor callback - just a helper function.
>   for (const Stmt *ChildS : S->children())
>     if (ChildS)
>       Visit(ChildS);
> }
> 
> void VisitStmt(const Stmt *S) {
>   // The default behavior that makes the visitor recursive over statements.
>   VisitChildren(S); 
> }
> 
> void VisitAttributedStmt(const AttributedStmt *AS) {
>   VisitAttributedNode(AS);
>   VisitChildren(AS); // This *optionally* goes into every overridden function.
> }
> ```
> 
> Also you'll probably have to manually unwrap `VisitVarDecl` into 
> `VisitDeclStmt` with a loop over decls. But generally i think that's 
> relatively little boilerplate for the much better control it provides.
> 
> > I never had performance problems with recursive visitors
> 
> Me too until i started doing `clang-tidy --enable-check-profile` :D So, like, 
> i don't think that's going to be a real problem but kind of why not avoid it 
> entirely.
That makes sense, but it's not a no-brainer tradeoff IMO. It simply gives me 
confidence that I'm not losing any portion of the AST out of my sight.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D93110

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

Reply via email to