[cfe-dev] Move VTableContext & friends from AST to CodeGen?

Anders Carlsson andersca at icloud.com
Wed May 15 06:18:48 PDT 2013


Hi Timur,

VTableBuilder actually started its life inside CodeGen, but was moved to AST because someone wanted to be able to use the clang fronted with a non-LLVM backend.

I forget the exact details, but I'm pretty sure you can dig through svn or mailing list history and find out.

- Anders

On May 15, 2013, at 5:32 AM, Timur Iskhodzhanov <timurrrr at google.com> wrote:

> Hi Anders, John,
> 
> Is there any reason for AST/VTableBuilder.{h,cpp} to be in AST?
> 
> I think these classes are only used in CodeGen.
> Here is an approximate list of files that use VTableContext,
> VTableLayout and VTableComponent:
>  CGClass.cpp
>  CGCXX.cpp
>  CGCXXABI.cpp
>  CGDebugInfo.cpp
>  CGExprConstant.cpp
>  CGExprCXX.cpp
>  CGRTTI.cpp
>  CGVTables.cpp
>  CGVTT.cpp
>  CodeGenModule.h
> 
> The reason I'm asking is because the current code layout makes it
> harder to add support for Microsoft ABI vftables.
> 
> Instead of having a single vtable with address points for non-primary
> bases (like in Itanium ABI), in Microsoft ABI we need to use a
> separate vftable builder for each base with a vfptr.
> Thus, we need to define these tables (in CGVTables?) and also emit
> stores to vfptrs in class constructors (in CGF?). We should be able to
> ask the VTableContext "hey, can you give me a list of virtual tables
> I need to define; and what vfptr I should emit stores for".
> 
> As you can see, the code for dealing with vtables in ABI-specific way
> is currently split
> over at least three places, thus making it much harder to add
> ABI-specific functionality.
> I've just looked at Reid's VBTables patch where he just wrote a
> VBTableBuilder in the middle of CGVTables and it's so much simpler to
> connect with CodeGen than what I'm doing in VTableBuilder.h for
> vftables...
> 
> I believe this should all be available through just one interface
> (CGVTables?) which should have different implementations like
> ItaniumABIVTables (with VTT) and MicrosoftABIVTables (with VBTables)
> to be used from ItaniumCXXABI / MicrosoftCXXABI respectively.
> This way, we'll consolidate the V{,F,B}Tables-related code from at
> least three different places to just one.
> This interface should also provide methods deal with virtual calls as
> they slightly differ in these ABIs as well and tied to the vtables.
> What do you think about this general direction?
> 
> Would you mind if I move AST/VTableBuilder into CodeGen as the first step?
> 
> --
> Timur Iskhodzhanov,
> Google Russia.





More information about the cfe-dev mailing list