Skip to content
Snippets Groups Projects
  • Reid Kleckner's avatar
    79bcca26
    C++14: Disable sized deallocation by default due to ABI breakage · 79bcca26
    Reid Kleckner authored
    There are no widely deployed standard libraries providing sized
    deallocation functions, so we have to punt and ask the user if they want
    us to use sized deallocation. In the future, when such libraries are
    deployed, we can teach the driver to detect them and enable this
    feature.
    
    N3536 claimed that a weak thunk from sized to unsized deallocation could
    be emitted to avoid breaking backwards compatibility with standard
    libraries not providing sized deallocation. However, this approach and
    other variations don't work in practice.
    
    With the weak function approach, the thunk has to have default
    visibility in order to ensure that it is overridden by other DSOs
    providing sized deallocation. Weak, default visibility symbols are
    particularly expensive on MachO, so John McCall was considering
    disabling this feature by default on Darwin. It also changes behavior
    ELF linking behavior, causing certain otherwise unreferenced object
    files from an archive to be pulled into the link.
    
    Our second approach was to use an extern_weak function declaration and
    do an inline conditional branch at the deletion call site. This doesn't
    work because extern_weak only works on MachO if you have some archive
    providing the default value of the extern_weak symbol. Arranging to
    provide such an archive has the same challenges as providing the symbol
    in the standard library. Not to mention that extern_weak doesn't really
    work on COFF.
    
    Reviewers: rsmith, rjmccall
    
    Differential Revision: http://reviews.llvm.org/D8467
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232788 91177308-0d34-0410-b5e6-96231b3b80d8
    79bcca26
    History
    C++14: Disable sized deallocation by default due to ABI breakage
    Reid Kleckner authored
    There are no widely deployed standard libraries providing sized
    deallocation functions, so we have to punt and ask the user if they want
    us to use sized deallocation. In the future, when such libraries are
    deployed, we can teach the driver to detect them and enable this
    feature.
    
    N3536 claimed that a weak thunk from sized to unsized deallocation could
    be emitted to avoid breaking backwards compatibility with standard
    libraries not providing sized deallocation. However, this approach and
    other variations don't work in practice.
    
    With the weak function approach, the thunk has to have default
    visibility in order to ensure that it is overridden by other DSOs
    providing sized deallocation. Weak, default visibility symbols are
    particularly expensive on MachO, so John McCall was considering
    disabling this feature by default on Darwin. It also changes behavior
    ELF linking behavior, causing certain otherwise unreferenced object
    files from an archive to be pulled into the link.
    
    Our second approach was to use an extern_weak function declaration and
    do an inline conditional branch at the deletion call site. This doesn't
    work because extern_weak only works on MachO if you have some archive
    providing the default value of the extern_weak symbol. Arranging to
    provide such an archive has the same challenges as providing the symbol
    in the standard library. Not to mention that extern_weak doesn't really
    work on COFF.
    
    Reviewers: rsmith, rjmccall
    
    Differential Revision: http://reviews.llvm.org/D8467
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232788 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.