llvm-project/libcxx/include
Louis Dionne 2ae52326da [libc++] Towards a simpler extern template story in libc++
The flexibility around extern template instantiation declarations in
libc++ result in a very complicated model, especially when support for
slightly different configurations (like the debug mode or assertions
in the dylib) are taken into account. That results in unexpected bugs
like http://llvm.org/PR50534 (and there have been multiple similar
bugs in the past, notably around the debug mode).

This patch gets rid of the _LIBCPP_DISABLE_EXTERN_TEMPLATE knob, which
I don't think is fundamental. Indeed, the motivation for that knob was to
avoid taking a dependency on the library, however that can be done better
by linking against the static library instead. And in fact, some parts of
the headers will always depend on things defined in the library, which
defeats the original goal of _LIBCPP_DISABLE_EXTERN_TEMPLATE.

Differential Revision: https://reviews.llvm.org/D103960
2022-06-08 22:05:07 -04:00
..
__algorithm [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
__bit [libc++] Replace _LIBCPP_HAS_NO_CONCEPTS with _LIBCPP_STD_VER > 17. NFCI. 2022-03-13 12:32:06 -04:00
__charconv [libc++] Don't use static constexpr in headers. 2022-06-07 18:47:44 +02:00
__chrono [NFC][libc++] Modularize chrono's calendar. 2022-04-06 17:47:53 +02:00
__compare [libc++] Replace _LIBCPP_HAS_NO_CONCEPTS with _LIBCPP_STD_VER > 17. NFCI. 2022-03-13 12:32:06 -04:00
__concepts [libc++] Replace _LIBCPP_HAS_NO_CONCEPTS with _LIBCPP_STD_VER > 17. NFCI. 2022-03-13 12:32:06 -04:00
__coroutine [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__filesystem [libc++] Add various missing _LIBCPP_HIDE_FROM_ABI 2022-05-27 13:14:57 -04:00
__format [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
__functional [libc++][NFC] Fix formatting that was incorrectly changed by D124695 2022-05-06 12:58:51 -04:00
__fwd [libc++][ranges] Implement `views::take`. 2022-05-06 14:16:13 -07:00
__ios [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__iterator [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
__memory [libc++] Define legacy symbols for inline functions at a finer-grained level 2022-04-12 13:44:30 -04:00
__numeric [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__random [libc++] Replace modulus operations in std::seed_seq::generate with conditional checks. 2022-05-24 10:29:25 +02:00
__ranges [libc++] Always enable the ranges concepts 2022-05-23 20:44:34 +02:00
__support [libcxx] Remove static inline and make use of _LIBCPP_HIDE_FROM_ABI in __support headers 2022-05-07 01:14:33 -04:00
__thread [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__type_traits [libc++] Fix conjunction/disjunction and mark a few LWG issues as complete 2022-06-03 10:31:42 +02:00
__utility [libc++] Enable move semantics for vector in C++03 2022-05-19 16:11:56 +02:00
__variant [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
experimental [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
ext [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
CMakeLists.txt [libc++] Fix modules builds when features are removed 2022-06-08 18:48:25 -04:00
__assert [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
__availability [libc++] Removes _LIBCPP_AVAILABILITY_TO_CHARS. 2022-06-07 18:59:19 +02:00
__bit_reference [libc++] Fix C++03 with the unstable ABI enabled 2022-04-25 15:17:24 +02:00
__bits [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__bsd_locale_defaults.h [libc++][NFC] Fix include guards and add a missing license header 2022-03-23 13:14:19 -04:00
__bsd_locale_fallbacks.h [libc++][NFC] Fix include guards and add a missing license header 2022-03-23 13:14:19 -04:00
__config [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
__config_site.in [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
__debug [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
__errc [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
__hash_table [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
__locale [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
__mbstate_t.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
__mutex_base [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__node_handle [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__split_buffer [libc++] Implement P0401R6 (allocate_at_least) 2022-04-09 16:03:45 +02:00
__std_stream [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__string [libc++] Remove raw call to debug handler from __char_traits_length_checked 2022-03-11 09:05:29 -05:00
__threading_support [libc++][NFC] Fix include guards and add a missing license header 2022-03-23 13:14:19 -04:00
__tree [libc++] Add a few _LIBCPP_ASSERTs in __tree 2022-05-05 11:29:48 -04:00
__tuple [libc++] Revert "Protect users from relying on detail headers" & related changes 2022-03-01 08:20:24 -05:00
__undef_macros [libc++] Assume that push_macro and pop_macro are available 2022-05-23 20:47:44 +02:00
algorithm [libc++] Implement ranges::adjacent_find 2022-06-08 12:15:03 +02:00
any [libc++] Add various missing _LIBCPP_HIDE_FROM_ABI 2022-05-27 13:14:57 -04:00
array [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
atomic [libcxx] Switch __cxx_contention_t to int32_t on 32 bit AIX 2022-05-12 19:00:42 +03:00
barrier [libc++] Remove conditional include 2022-05-25 10:04:54 -04:00
bit [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
bitset [libc++] `bitset::operator[] const` should return bool 2022-04-13 22:55:04 +02:00
cassert [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ccomplex [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cctype [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cerrno [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cfenv [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cfloat [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
charconv [libc++] Removes _LIBCPP_AVAILABILITY_TO_CHARS. 2022-06-07 18:59:19 +02:00
chrono [NFC][libc++] Modularize chrono's calendar. 2022-04-06 17:47:53 +02:00
cinttypes [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ciso646 [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
climits [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
clocale [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cmath [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
codecvt [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
compare [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
complex [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
complex.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
concepts [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
condition_variable [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
coroutine [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
csetjmp [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
csignal [libc++] Fix modules builds when features are removed 2022-06-08 18:48:25 -04:00
cstdarg [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cstdbool [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cstddef [libc++] Use __enable_if_t and is_integral in cstddef 2022-05-29 12:05:02 +02:00
cstdint [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cstdio [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cstdlib [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cstring [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ctgmath [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ctime [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ctype.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
cuchar [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cwchar [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
cwctype [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
deque [libc++][format][3/6] Adds a __container_buffer. 2022-04-09 09:35:48 +02:00
errno.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
exception [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
execution [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
fenv.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
filesystem [libc++] Improve error messages for disabled modes 2022-05-20 09:36:55 -04:00
float.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
format [libc++][format][5/6] Improve format_to_n. 2022-05-18 20:14:32 +02:00
forward_list [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
fstream [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
functional [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
future [libc++] Improve error messages for disabled modes 2022-05-20 09:36:55 -04:00
initializer_list [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
inttypes.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
iomanip [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ios [libc++] Improve error messages for disabled modes 2022-05-20 09:36:55 -04:00
iosfwd [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
iostream [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
istream [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
iterator [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
latch [libc++] Make sure that all headers can be included with modules enabled 2022-05-25 03:44:48 -04:00
limits [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
limits.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
list [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
locale [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
locale.h [libc++] Improve error messages for disabled modes 2022-05-20 09:36:55 -04:00
map [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
math.h [libc++][AIX] Use C++ overloads from libc++'s math.h 2022-03-01 15:53:41 -05:00
memory [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
module.modulemap.in [libc++] Fix modules builds when features are removed 2022-06-08 18:48:25 -04:00
mutex [libc++] Remove <functional> includes 2022-04-26 08:54:37 +02:00
new [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
numbers [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
numeric [libc++] Remove <functional> includes 2022-04-26 08:54:37 +02:00
optional [libc++] Fix typo in comment at __optional_storage_base 2022-06-02 19:46:04 +02:00
ostream [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
queue [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
random [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
ranges [libc++] add zip_view and views::zip for C++23 2022-04-25 12:22:22 +02:00
ratio [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
regex [libc++] Granularize <functional> includes 2022-04-20 22:49:18 +02:00
scoped_allocator [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
semaphore [libc++] Make sure that all headers can be included with modules enabled 2022-05-25 03:44:48 -04:00
set [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
setjmp.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
shared_mutex [libc++] Improve error messages for disabled modes 2022-05-20 09:36:55 -04:00
span [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
sstream [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
stack [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
stdatomic.h [libc++] Remove overly conservative error in <stdatomic.h> 2022-05-16 15:30:01 -04:00
stdbool.h [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
stddef.h [libc++] Remove the ability to use the std::nullptr_t emulation in C++03 mode 2022-02-07 17:51:05 -05:00
stdexcept [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
stdint.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
stdio.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
stdlib.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
streambuf [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
string [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
string.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
string_view [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
strstream [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
system_error [libc++] Define legacy symbols for inline functions at a finer-grained level 2022-04-12 13:44:30 -04:00
tgmath.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
thread [libc++] Improve error messages for disabled modes 2022-05-20 09:36:55 -04:00
tuple [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
type_traits [libc++] Fix conjunction/disjunction and mark a few LWG issues as complete 2022-06-03 10:31:42 +02:00
typeindex [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
typeinfo [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
uchar.h [libc++] Add missing header <cuchar> 2022-03-07 08:48:50 -05:00
unordered_map [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
unordered_set [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
utility [libc++] Ensure that all public C++ headers include <__assert> 2022-03-30 15:05:31 -04:00
valarray [libc++] Towards a simpler extern template story in libc++ 2022-06-08 22:05:07 -04:00
variant [libc++] Remove unused __functional includes 2022-05-28 10:12:39 +02:00
vector [libc++] Make the Debug mode a configuration-time only option 2022-06-07 16:33:53 -04:00
version [libc++] Removes __cpp_lib_monadic_optional. 2022-05-31 19:18:34 +02:00
wchar.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00
wctype.h [libc++] Normalize all our '#pragma GCC system_header', and regression-test. 2022-02-04 12:27:19 -05:00