[cfe-dev] can Clang Plugin modify the AST and send it back to the next step of compliation?

John Brawn via cfe-dev cfe-dev at lists.llvm.org
Wed Sep 2 06:21:46 PDT 2020


You can have a plugin AST action run before the 'main' action (i.e. before compilation) which means that the AST after
the action has run is what is compiled. There's an example at
 https://github.com/llvm/llvm-project/blob/master/clang/examples/AnnotateFunctions/AnnotateFunctions.cpp
which modifies the AST by adding function attributes.

John

________________________________
From: cfe-dev <cfe-dev-bounces at lists.llvm.org> on behalf of Yafei Liu via cfe-dev <cfe-dev at lists.llvm.org>
Sent: 02 September 2020 13:25
To: Miklos Vajna <vmiklos at vmiklos.hu>
Cc: Clang Dev <cfe-dev at lists.llvm.org>
Subject: Re: [cfe-dev] can Clang Plugin modify the AST and send it back to the next step of compliation?

Hi Miklos, I think applying replacements to original source file is not what I expect, it does not act as a "dialect" to me.

What I want to do gives a feeling of "AST programming" (I just made up this term).

On Wed, Sep 2, 2020 at 5:24 PM Miklos Vajna <vmiklos at vmiklos.hu<mailto:vmiklos at vmiklos.hu>> wrote:
Hi,

On Wed, Sep 02, 2020 at 02:36:38PM +0800, Yafei Liu via cfe-dev <cfe-dev at lists.llvm.org<mailto:cfe-dev at lists.llvm.org>> wrote:
> All the examples of Clang plugin and FrontendActions I've read are to get
> the AST and print some information, I'm curious if I can modify the AST to
> make some dialect C++ language?
>
> I got some examples I think is easy to do if AST could be modified:
> 1. make all subclasses inherit baseclasses' friend class
> 2. make all method virtual (like Java)

The typical workflow is to emit fixits/replacements and then apply them,
rather than modifying the AST. clang-tidy has plenty of checks which do
this already.

Regards,

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


More information about the cfe-dev mailing list