RecursiveASTVisitor: How to traverse all FieldDecl in a CXXRecordDecl?

Hi,

I have simple RecursiveASTVisitor, which should handle definition of structs and their fields.

How can I traverse over all FieldDecl in a given CXXRecordDecl?

Because of the sequence the AST is traversed, I don't know in a VisitFieldDecl approach to which CXXRecordDecl it belongs to.

I hope I have stated my problem understandable..-

Thanks

Marcel

From: cfe-dev <cfe-dev-bounces@lists.llvm.org> On Behalf Of Marcel
Schaible via cfe-dev
Sent: Monday, November 30, 2020 11:49 AM
To: cfe-dev@lists.llvm.org
Subject: [cfe-dev] RecursiveASTVisitor: How to traverse all FieldDecl in a
CXXRecordDecl?

Hi,

I have simple RecursiveASTVisitor, which should handle definition of
structs and their fields.

How can I traverse over all FieldDecl in a given CXXRecordDecl?

Because of the sequence the AST is traversed, I don't know in a
VisitFieldDecl approach to which CXXRecordDecl it belongs to.

I don't know anything about RecursiveASTVisitor so there might be
a way to do what you want there. If you need to traverse the AST
"manually" there's code in clang/lib/CodeGen/CGDebugInfo.cpp (look
for CGDebugInfo::CollectRecordFields) that could be instructive.
Note that a VarDecl describes a static data member, while a
FieldDecl describes a normal data member.

--paulr

Depending on the context of your program you can either try to 1) traverse the fields within VisitCXXRecordDecl() or 2) use the FieldDecl::getParent() method within VisitFieldDecl() to figure out which CXXRecordDecl the FieldDecl belongs to (if any).

-Adam

Maybe you can try CXXRecordDecl::fields()?