Skip to content
Snippets Groups Projects
  • Anders Carlsson's avatar
    6d7f8473
    When building with optimizations, emit vtables where the key is not in the · 6d7f8473
    Anders Carlsson authored
    current translation unit as available_externally. 
    
    This helps devirtualize the second example in PR3100, comment 18:
    
    struct S { S() {}; virtual void xyzzy(); };
    inline void foo(S *s) { s->xyzzy(); }
    void bar() { S s; foo(&s); }
    
    This involved four major changes:
    
    1. In DefineUsedVTables, always mark virtual member functions as referenced for
       non-template classes and class template specializations.
    2. In CodeGenVTables::ShouldEmitVTableInThisTU return true if optimizations are
       enabled, even if the key function is not implemented in this translation 
       unit. We don't ever do this for code compiled with -fapple-kext, because we
       don't ever want to devirtualize virtual member function calls in that case.
    3. Give the correct linkage for vtables where the key function is not defined.
    4. Update the linkage for RTTI structures when necessary.
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124565 91177308-0d34-0410-b5e6-96231b3b80d8
    6d7f8473
    History
    When building with optimizations, emit vtables where the key is not in the
    Anders Carlsson authored
    current translation unit as available_externally. 
    
    This helps devirtualize the second example in PR3100, comment 18:
    
    struct S { S() {}; virtual void xyzzy(); };
    inline void foo(S *s) { s->xyzzy(); }
    void bar() { S s; foo(&s); }
    
    This involved four major changes:
    
    1. In DefineUsedVTables, always mark virtual member functions as referenced for
       non-template classes and class template specializations.
    2. In CodeGenVTables::ShouldEmitVTableInThisTU return true if optimizations are
       enabled, even if the key function is not implemented in this translation 
       unit. We don't ever do this for code compiled with -fapple-kext, because we
       don't ever want to devirtualize virtual member function calls in that case.
    3. Give the correct linkage for vtables where the key function is not defined.
    4. Update the linkage for RTTI structures when necessary.
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124565 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.