[cfe-commits] [patch] CXXABI getter/setter

John McCall rjmccall at apple.com
Sun Aug 19 16:21:10 PDT 2012


On Aug 19, 2012, at 3:50 PM, João Matos wrote:
> I am creating my own mangler instance. The problem is that it takes an AST context, which has it's own CXXABI object, and it can't be changed.
> 
> And you are right, it's probably not correct under all the circumstances, I'll change my code to make an AST for each different ABI. I had not remembered about template parameters, that is a good reason.
> 
> By the way, is there any reason ABI dependent stuff could not be abstracted from the actual AST? It just feels wasteful to have to parse code twice to get layout and mangling information.

A couple reasons.

The first is that there are some places — like template arguments — where constant folding is absolutely vital to the operation of the compiler:  it could affect whether two types are the same, what members a template specialization has, whether the program's even well-formed, etc.  So some parts of the AST would have to be target-dependent, full stop.

The second is that C's conditional compilation model makes it very challenging to re-use work between compilations with different targets.  There'd be a lot of assumptions you'd have to re-check in order to reuse the supposedly target-independent results of a previous compilation.

The third is that, in a project with N source files and M targets, it is almost guaranteed that N will be far larger than M.  That makes it much more valuable to eliminate redundant work with the same *target* than to reduce redundant work with the same *file*.

Finally, any attempt to preserve the target-independence of the AST would encumber interesting optimizations like caching the results of constant folding;  they wouldn't be impossible, but they'd have to involve more special cases and more side-tables, all to serve the relatively uncommon case that we could actually usefully re-use parts of an AST across targets.

John.



More information about the cfe-commits mailing list