[cfe-users] RecursiveASTVisitor won't visit all declarations in the AST
Teodor Dermendzhiev via cfe-users
cfe-users at lists.llvm.org
Wed Jan 30 06:07:15 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 <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 .
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/cfe-users/attachments/20190130/76284c63/attachment.html>
More information about the cfe-users
mailing list