[cfe-dev] [RFC] Easier source-to-source transformations with clang tooling

Yitzhak Mandelbaum via cfe-dev cfe-dev at lists.llvm.org
Wed Jan 23 19:24:13 PST 2019

Hi Joel,

Yes, both are correct. However, clang already has support for serializing
the result as source (actually, it's more like applying your patch to the
original source) so that's pretty easy.  We're also planning to work on
making that process of rerunning clang smoother and more efficient (e.g.
some form of incremental recompilation to AST), but that's still off in the

On Wed, Jan 23, 2019 at 6:24 PM Joel E. Denny <jdenny.ornl at gmail.com> wrote:

> Hi Yitzhak,
> On Fri, Nov 16, 2018 at 10:22 AM Yitzhak Mandelbaum via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>> Hi all,
>> I have a proposal for a framework that makes it easier to write source to
>> source transformations with the clang::Tooling libraries, including
>> clang-tidy checks.
>> The full proposal is in this doc:
>> https://docs.google.com/document/d/1ppw0RhjwsrbBcHYhI85pe6ISDbA6r5d00ot3N8cQWeQ/edit?usp=sharing
> I just took a quick pass on this document, and it looks interesting.
> However, I'm not very familiar with this area of clang, and I have a few
> high-level questions to be sure I understand the objectives of your tool.
> My understanding is that the input of a transformation using your tool is
> a clang AST and the output is new source code.  Is that correct?
> If so, it seems your tool is optimized for (but not functionally limited
> to) transformations involving a single pass where the ultimate product is
> source code.  That is, after running a transformation pass, if you want to
> either run additional transformation passes or perform LLVM IR codegen, you
> would need to serialize the output as source code and run clang again to
> get the new AST.  Is that correct?
> Thanks.
> Joel
>> From the doc:
>> Transformer is a framework that aims to simplify development of
>> clang-based source-to-source transformations.  It focuses on the particular
>> class of transformations that act only locally — that is, use local
>> information about the code and make local changes  (like a syntax-aware
>> “find-and-replace”); and at scale — that is, will be carried out on many
>> source files.  The target audience is users that are comfortable with, or
>> willing to become comfortable with, the clang AST matchers library.
>> I have a working prototype of this library which I've used on small
>> examples inside Google.  I plan to put together a patch for reference
>> next week, although the doc should stand on its own.
>> Thanks!
>> Yitzhak Mandelbaum
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190123/220a7c1b/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4847 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190123/220a7c1b/attachment.bin>

More information about the cfe-dev mailing list