[cfe-dev] Handling multiple translation units
Simone Pellegrini
spellegrini at dps.uibk.ac.at
Fri Oct 23 10:19:14 PDT 2009
Dear all,
I need to perform code transformations based on inter-procedural
analysis done on multiple translation units.
In order to do that I need to keep the AST generated for each
translation unit in memory, do my analysis and then restart rewriting
part of the AST I need to modify. Conceptually is not difficult my I am
experiencing a weird behavior of Clang and maybe you can help me.
basically that's what I am doing:
vector<ASTContext*> ctxs;
for each input file{
Preprocessor PP(...);
InitializePreprocessor(PP);
ctxs.push_back( new ASTContext(...., false, 0) );
ParseAST(PP, *ctxs.back(),...);
}
// Now do ANALYSIS (e.g. building a clang::CallGraph )
for each context in ctxs{
DeclContext *DC=ctxs[i];
for each decl{
if decl is a func{
FuncDecl* FD = ();
cout << FD->getNameAsString() << endl; <--- ERROR
}
}
}
As you can see from the code, every time I try to access the information
of the ASTContext it looks like everything is gone. why?
I have to say that every time I parse a new translation unit I
reinitialize the Preprocessor and I use different SourceManagers.
I also saw the possibility to use PHC files but I as I already told you
I need to modify portion of the code and I am afraid PHC will not be
suitable for me.
regards, Simone
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20091023/526ff6fe/attachment.html>
More information about the cfe-dev
mailing list