[cfe-dev] Missing CXXRecordDecl when using ClangTool
Frank Redeker via cfe-dev
cfe-dev at lists.llvm.org
Fri Jun 23 23:18:25 PDT 2017
Hello all,
I am using ClangTool::buildASTs to get the ASTUnit for a given file (or
files)
to analyze them with my own RecursiveASTVisitor using the following loop.
(Here astunit is the ASTUnit returned from ClangTool::buildASTs)
for (auto decl = astuint->top_level_begin(); decl !=
astuint->top_level_end(); ++decl) {
TraverseDecl(*decl);
}
I wonder when analysing the following code why the CXXRecordDecl for
union is
missing in the AST.
static union {
int Member_1;
int Member_2;
};
int TestObject () {
return Member_1;
}
When replacing TraverseDecl(*decl); with (*decl)->dump(); I get the
following
output.
VarDecl 0x378bf50
`-CXXConstructExpr 0x378c1c0
FunctionDecl 0x378c280
`-CompoundStmt 0x378c380
`-ReturnStmt 0x378c370
`-ImplicitCastExpr 0x378c360
`-MemberExpr 0x378c338
`-DeclRefExpr 0x378c320
While the output from clang-check -ast-dump is this.
|-CXXRecordDecl 0x6000bb938
| |-FieldDecl 0x6000bba60
| |-FieldDecl 0x6000bbab8
| |-CXXConstructorDecl 0x6000bbbd0
| | `-CompoundStmt 0x6000bbf10 <col:8>
| `-CXXConstructorDecl 0x6000bbd28
| `-ParmVarDecl 0x6000bbe70
|-VarDecl 0x6000bbb50
| `-CXXConstructExpr 0x6000bbf28
|-IndirectFieldDecl 0x600142cc0
| |-Var 0x6000bbb50
| `-Field 0x6000bba60
|-IndirectFieldDecl 0x600142d10
| |-Var 0x6000bbb50
| `-Field 0x6000bbab8
`-FunctionDecl 0x600142da0
`-CompoundStmt 0x600142f18
`-ReturnStmt 0x600142f00
`-ImplicitCastExpr 0x600142ee8
`-MemberExpr 0x600142eb0
`-DeclRefExpr 0x600142e88
Am I missing to pass a needed option when building CommonOptionsParser
object. (CommonOptionsParser::getCompilation() ist passed when creating
the ClangTool object)
Hoping that one can help me.
Frank
More information about the cfe-dev
mailing list