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

Joel E. Denny via cfe-dev cfe-dev at lists.llvm.org
Wed Jan 23 19:42:43 PST 2019

On Wed, Jan 23, 2019 at 10:24 PM Yitzhak Mandelbaum <yitzhakm at google.com>

> 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
> future.

Thanks for explaining.  Can you say more about what you're thinking for
incremental recompilation and how far off that might be?


> 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/f729ed41/attachment.html>

More information about the cfe-dev mailing list