[cfe-dev] How to make clang compile the data from the RewriteBuffer

Vassil Vassilev vasil.georgiev.vasilev at cern.ch
Mon Aug 11 00:59:02 PDT 2014


On 08/10/2014 11:02 AM, Bogdan Tabacaru wrote:
> Hi Vassil,
>
> thanks for the example and the patch!
>
> I have applied both of them successfully, but somehow, re-ordering the 
> consumers still did not give me the expected results. This means, when 
> I call the plugin it executes correctly, but CodeGen still only uses 
> the original file (without the changes made by the plugin).
>
> Is there another step which I may have forgotten?
>
   If you reorder the consumers in the initialization, it should work. 
Are you sure you have the right tests to check for the desired 
behaviour? I.e are you sure you are making a valid AST-transformation?
Vassil
> Cheers,
> Bogdan
>
>
> On Sunday, August 10, 2014 12:22 AM, Vassil Vassilev 
> <vvasilev at cern.ch> wrote:
>
>
> Hi Bogdan,
>   After applying the attached patch, I can do:
>
> void MyPlugin::Initialize(ASTContext& Context) {
> // We need to reorder the consumers in the MultiplexConsumer.
> MultiplexConsumer& multiplex
> = static_cast<MultiplexConsumer&>(m_CI.getASTConsumer());
> std::vector<ASTConsumer*>& consumers = multiplex.getConsumers();
> ASTConsumer* lastConsumer = consumers.back();
> consumers.pop_back();
> consumers.insert(consumers.begin(), lastConsumer);
> }
>
> This allows me to hook MyPlugin before clang's codegen.
>
> Vassil
> On 09/08/14 21:24, Bogdan Tabacaru wrote:
> Hi Vassil,
>
> Is the patch available for the 3.4.2 version of LLVM or must I migrate 
> to the "current" version ?
>
> Cheers,
> Bogdan
>
>
> On Friday, August 8, 2014 6:16 PM, Vassil Vassilev <vvasilev at cern.ch> 
> <mailto:vvasilev at cern.ch> wrote:
>
>
> Hi,
>   There is a pending patch on cfe-commits about this "[PATCH] 
> clang/Frontend/MultiplexConsumer.h". With it you could reorder the 
> ASTConsumers in clang and get yours before codegen.
> Vassil
> On 08/08/14 16:48, Bogdan Tabacaru wrote:
> Hi everyone,
>
> I want to create a plugin that makes some changes on the parsed AST 
> and that directly compiles the changes made on the AST. It is 
> important that I do not generate a new file with the changes on the AST.
> So, in other words, I want to change the AST in place, and then 
> compile it in the same run, using a Clang Plugin.
>
> I am using llvm 3.4.2.
>
> By following the RecursiveASTVisitor example, I have written a clang 
> plugin which modifies the parsed AST.
>
> I am using the Rewriter class to ReplaceText inside the buffer.
>
> I am also using the -add-plugin command(instead the "standard" -plugin 
> command) when calling the plugin.
>
> The rewriting part works excellently. However, when I continue the 
> compilation, clang only compiles the original file, instead of the 
> original file + changes.
> Is there a way to tell clang/llvm to compile what I have written in 
> the AST (using the Rewriter) without creating an intermediate file?
>
> Thanks a lot for your help,
> Bogdan
>
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu  <mailto:cfe-dev at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140811/f886440f/attachment.html>


More information about the cfe-dev mailing list