Life time of AST elements.

Hello all,

I'm writing a tool to analyze the call hierarchy of functions (methods)
using ClangTool.

My idea is to collect the TranslationUnitDecls given to my own
ASTCosumer's HandleTranslationUnit method and traverse them later when
ClangTool.run() has finished.

But it seems that the AST nodes are no longer valid after
ClangTool.run() has returned. (e.g. If I call getQualifiedNameAsString()
on a FunctionDecl object retrieved from the TranslationUnitDecl, I get
`Assertion failed: DC && "This decl is not contained in a translation
unit!"`)

So I wonder if there is any trick to extend the life time for the AST or
should I use ClangTool.buildAST() rather then ClangTool.run() to get the
ASTs ?

Frank

Hello all,

I’m writing a tool to analyze the call hierarchy of functions (methods)
using ClangTool.

My idea is to collect the TranslationUnitDecls given to my own
ASTCosumer’s HandleTranslationUnit method and traverse them later when
ClangTool.run() has finished.

But it seems that the AST nodes are no longer valid after
ClangTool.run() has returned. (e.g. If I call getQualifiedNameAsString()
on a FunctionDecl object retrieved from the TranslationUnitDecl, I get
Assertion failed: DC && "This decl is not contained in a translation unit!")

So I wonder if there is any trick to extend the life time for the AST or
should I use ClangTool.buildAST() rather then ClangTool.run() to get the
ASTs ?

The idea is to do the reverse:
Store any information about the AST you want later in some data structure in the callback.