[all-commits] [llvm/llvm-project] 288a14: [libc++] Explicitly enumerate std::string external...
Eric via All-commits
all-commits at lists.llvm.org
Wed Jan 15 14:15:40 PST 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 288a1436392f1fbee2e647cb057086fe700f9c7e
https://github.com/llvm/llvm-project/commit/288a1436392f1fbee2e647cb057086fe700f9c7e
Author: Eric Fiselier <eric at efcs.ca>
Date: 2020-01-15 (Wed, 15 Jan 2020)
Changed paths:
M libcxx/include/__config
M libcxx/include/__string
M libcxx/include/string
M libcxx/src/string.cpp
Log Message:
-----------
[libc++] Explicitly enumerate std::string external instantiations - Attempt 2
The GCC build failures have been addressed, and the LLDB failures were
fixed by LLDB.
I have also verified that the apple-clang 9.0 segfault no longer
occurs.
Original Message:
The external instantiation of std::string is a problem for libc++.
Additions and removals of inline functions in string can cause ABI
breakages, including introducing new symbols.
This patch aims to:
(1) Make clear which functions are explicitly instatiated.
(2) Prevent new functions from being accidentally instantiated.
(3) Allow a migration path for adding or removing functions from the
explicit instantiation over time.
Although this new formulation is uglier, it is preferable from a
maintainability and readability standpoint because it explicitly
enumerates the functions we've chosen to expose in our ABI. Changing
this list is non-trivial and requires thought and planning.
(3) is achieved by making it possible to control the extern template declaration
separately from it's definition. Meaning we could add a new definition to
the dylib, wait for it to roll out, then add the extern template
declaration to the header. Similarly, we could remove existing extern
template declarations while still keeping the definition to prevent ABI
breakages.
More information about the All-commits
mailing list