Skip to content
Snippets Groups Projects
  • Peter Collingbourne's avatar
    47213cf9
    Rework interface for bitset-using features to use a notion of LTO visibility. · 47213cf9
    Peter Collingbourne authored
    Bitsets, and the compiler features they rely on (vtable opt, CFI),
    only have visibility within the LTO'd part of the linkage unit. Therefore,
    only enable these features for classes with hidden LTO visibility. This
    notion is based on object file visibility or (on Windows)
    dllimport/dllexport attributes.
    
    We provide the [[clang::lto_visibility_public]] attribute to override the
    compiler's LTO visibility inference in cases where the class is defined
    in the non-LTO'd part of the linkage unit, or where the ABI supports
    calling classes derived from abstract base classes with hidden visibility
    in other linkage units (e.g. COM on Windows).
    
    If the cross-DSO CFI mode is enabled, bitset checks are emitted even for
    classes with public LTO visibility, as that mode uses a separate mechanism
    to cause bitsets to be exported.
    
    This mechanism replaces the whole-program-vtables blacklist, so remove the
    -fwhole-program-vtables-blacklist flag.
    
    Because __declspec(uuid()) now implies [[clang::lto_visibility_public]], the
    support for the special attr:uuid blacklist entry is removed.
    
    Differential Revision: http://reviews.llvm.org/D18635
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267784 91177308-0d34-0410-b5e6-96231b3b80d8
    47213cf9
    History
    Rework interface for bitset-using features to use a notion of LTO visibility.
    Peter Collingbourne authored
    Bitsets, and the compiler features they rely on (vtable opt, CFI),
    only have visibility within the LTO'd part of the linkage unit. Therefore,
    only enable these features for classes with hidden LTO visibility. This
    notion is based on object file visibility or (on Windows)
    dllimport/dllexport attributes.
    
    We provide the [[clang::lto_visibility_public]] attribute to override the
    compiler's LTO visibility inference in cases where the class is defined
    in the non-LTO'd part of the linkage unit, or where the ABI supports
    calling classes derived from abstract base classes with hidden visibility
    in other linkage units (e.g. COM on Windows).
    
    If the cross-DSO CFI mode is enabled, bitset checks are emitted even for
    classes with public LTO visibility, as that mode uses a separate mechanism
    to cause bitsets to be exported.
    
    This mechanism replaces the whole-program-vtables blacklist, so remove the
    -fwhole-program-vtables-blacklist flag.
    
    Because __declspec(uuid()) now implies [[clang::lto_visibility_public]], the
    support for the special attr:uuid blacklist entry is removed.
    
    Differential Revision: http://reviews.llvm.org/D18635
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267784 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.