[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