[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