[cfe-dev] How to make clang compile the data from the RewriteBuffer
Bogdan Tabacaru
bogdan.tabacaru88 at yahoo.com
Sun Aug 10 02:02:55 PDT 2014
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?
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> 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 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/20140810/361ccc50/attachment.html>
More information about the cfe-dev
mailing list