(original) (raw)

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@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 ) 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

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
LLVM Developers mailing list
llvm-dev@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev