[cfe-dev] [llvm-dev] RecursiveASTVisitor won't visit all declarations

Bekket McClane via cfe-dev cfe-dev at lists.llvm.org
Tue Feb 5 10:24:13 PST 2019


Hi,

I think it’s more suitable to ask this question on clang mailing list (cfe-dev)

B.R.
Bekket

> On Feb 5, 2019, at 12:29 AM, Teodor Dermendzhiev via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi all,
> I am having problems walking through the syntax tree of a simple header file. With llvm 4.0.1 everything works as expected but after upgrading to 7.0.0 I notice that just a small number of all declarations in the AST are being visited. 
> 
> Running a simple ASTFrontendAction (like the one from this article - https://clang.llvm.org/docs/RAVFrontendAction.html <https://clang.llvm.org/docs/RAVFrontendAction.html> ) in HandleTranslationUnit() -
> 
>     virtual void HandleTranslationUnit(ASTContext &Context) {
>         Decl* tu = Context.getTranslationUnitDecl();
>         Visitor.TraverseDecl(tu);
>     }
> 
> when I dump the *tu* variable I get a lot smaller dump with 7.0.0. After investigating further I updated TraverseDeclContextHelper() method in order to print the size of decls() container for every DeclContext we visit:
> 
> template <typename Derived>
> bool RecursiveASTVisitor<Derived>::TraverseDeclContextHelper(DeclContext *DC) {
>   if (!DC)
>     return true;
> 
>   int childSize = 0; // my code
> 
>   for (auto *Child : DC->decls()) {
>     childSize++; // my code
>     if (!canIgnoreChildDeclWhileTraversingDeclContext(Child))
>         TRY_TO(TraverseDecl(Child));
>   }
> 
>   std::cout << DC->getDeclKindName() << ": " << childSize << " child declarations" << "\n"; //my code
> 
>   return true;
> }
> 
> With llvm 4.0.0 I get: 
> TranslationUnit: 20526 child declarations
> 
> while with 7.0.0:
> TranslationUnit: 486 child declarations
> 
> I created a sample project that illustrates this behavior - https://github.com/tdermendjiev/clang-samples <https://github.com/tdermendjiev/clang-samples> . 
> 
> Any help tackling this issue is appreciated. Thank you.
> 
> Best wishes,
> Teodor Dermendzhiev
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190205/4f6a73e3/attachment.html>


More information about the cfe-dev mailing list