[cfe-commits] r92753 - in /cfe/trunk: lib/AST/DeclCXX.cpp	lib/AST/RecordLayoutBuilder.cpp lib/CodeGen/CGVtable.cpp	lib/CodeGen/CodeGenModule.cpp lib/Sema/SemaDecl.cpp	lib/Sema/SemaDeclCXX.cpp test/CodeGenCXX/vtable-key-function.cpp	test/CodeGenCXX/vtable-linkage.cpp
    Chris Lattner 
    clattner at apple.com
       
    Tue Jan  5 11:46:22 PST 2010
    
    
  
On Jan 5, 2010, at 11:06 AM, Douglas Gregor wrote:
> Author: dgregor
> Date: Tue Jan  5 13:06:31 2010
> New Revision: 92753
>
> URL: http://llvm.org/viewvc/llvm-project?rev=92753&view=rev
> Log:
> Improve key-function computation for templates. In particular:
>  - All classes can have a key function; templates don't change that.
>  non-template classes when computing the key function.
>  - We always mark all of the virtual member functions of class
>  template instantiations.
>  - The vtable for an instantiation of a class template has weak
>  linkage.
>
> We could probably use available_externally linkage for vtables of
> classes instantiated by explicit instantiation declarations (extern
> templates), but GCC doesn't do this and I'm not 100% that the ABI
> permits it.
GCC is missing several optimizations in this area that prevent  
devirtualization etc.  available_externally can be used any time we  
know the contents of the object and we know it will be emitted to some  
other translation unit.  It just gives the optimizer the ability to  
see into the data without emitting it.
-Chris
    
    
More information about the cfe-commits
mailing list