[llvm-dev] RecursiveASTVisitor won't visit all declarations (original) (raw)

Teodor Dermendzhiev via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 5 00:29:36 PST 2019


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 ) 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 bool RecursiveASTVisitor::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 .

Any help tackling this issue is appreciated. Thank you.

Best wishes, Teodor Dermendzhiev

-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190205/6aceb49e/attachment.html>



More information about the llvm-dev mailing list