[cfe-dev] Driver support for AST features (UI Proposal)

Douglas Gregor dgregor at apple.com
Tue Sep 1 08:36:21 PDT 2009

On Aug 31, 2009, at 10:51 PM, Daniel Dunbar wrote:

> Hi all,
> This is a UI design proposal for the clang driver for providing user /
> tool access to clang AST based features.
> 1. Support '-emit-ast'; this will be an option like '-S' in that it
> stops compilation at the AST production phase, and will generate files
> with a '.ast' suffix.

Makes sense.

> 2. Recognize '.ast' files as source inputs which can be compiled.
> Obviously this will start at the compilation phase, in the same way
> that '.i' etc inputs bypass the preprocessing phase.
>    a. clang will call clang with an explicit argument telling it to
> compile from .ast (-compile-ast) instead of -S.
>    b. The compile-ast action will skip passing preprocessing specific
> options to clang (but still pass options used by the code generator).

Seems reasonable.

> Eventually we will probably also want a feature '-write-ast' (or so)
> which will output an AST while doing other things (like compiling),
> but that is not part of this proposal.
> One salient design point is that the default suffix for AST files is
> '.ast', which does not indicate the source language. This means the
> driver won't be able to make decisions about things like code
> generator options based on its language.

If nothing else, we need to know when the AST file is a C++ file, so  
that we can link in the C++ standard library.

> I'm not sure yet if this
> matters. If it did we would either (a) have to poke the .ast to figure
> out its language, or (b) use -x with new options like c++-ast etc
> (like for preprocessed inputs) and optionally use suffixes like
> '.c-ast', '.cpp-ast', etc.

We should poke the AST file for this information.

> Comments?

Looks great! No red flags in the patch; I say, "go for it".

> A patch following this design is attached. The compile-ast option is
> not implemented in clang, and I don't know exactly what model we want
> for compile options passed to an ast -> .s compile step (most of them
> are backed in the .ast, but not all of them).

If we do nothing, we'll end up checking the AST-backed options  
(complaining when there are differences) and just passing the other  
compilation options through to CodeGen for generation of the .s file.  
That seems fine to me.

   - Doug

More information about the cfe-dev mailing list