[cfe-dev] How to make clang compile the data from the RewriteBuffer
Vassil Vassilev
vvasilev at cern.ch
Tue Aug 12 10:19:44 PDT 2014
Hi Bogdan,
It seems that your visitor is called too late, i.e on
HandleTranslationUnit. You should override HandleTopLevelDecl instead.
Cheers,
Vassil
On 12/08/14 10:53, Bogdan Tabacaru wrote:
> Hi Vassil,
>
> I have attempted to debug the Rewriter and CodeGenerator myself and
> see what happens when compiling, but the amount of code is rather
> massive and will take some time.
>
> Here is an running simplified example of what I am doing. Would mind
> running it and telling me whether it worked for you or not?
>
> Cheers,
> Bogdan
>
>
> On Monday, August 11, 2014 11:18 AM, Bogdan Tabacaru
> <bogdan.tabacaru88 at yahoo.com> wrote:
>
>
> That is a good question.
>
> I have written a libTool with the same visitor and consumer.
> I called my_Rewriter.ReplaceText() to make my AST-transformations.
> I have output the RewriteBuffer to a new file and then I compiled it.
> When I run the transformed source, it gives me the expected behavior.
> However, this requires me to explicitly create a new file with the
> changes.
>
> If I do the same thing with the PluginASTAction (with or without
> re-ordering the Consumers), I only get the behavior from the original
> source file.
>
>
>
> On Monday, August 11, 2014 9:59 AM, Vassil Vassilev
> <vasil.georgiev.vasilev at cern.ch> wrote:
>
>
> 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> <mailto: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/20140812/47285faa/attachment.html>
More information about the cfe-dev
mailing list