[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
dgregor at apple.com
Tue Jan 5 12:55:18 PST 2010
On Jan 5, 2010, at 11:46 AM, Chris Lattner wrote:
> 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
>> 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
>> 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.
Yes, I know. The question is whether the ABI requires us to emit a
(weak) vtable when there is an explicit instantiation declaration,
since the ABI document just refers to "template instantiations" as if
they were all the same.
More information about the cfe-commits