llvm-project/libcxx/include
Shoaib Meenai c7cd73e8b8 [libc++] Add a key function for bad_function_call
Summary:
bad_function_call is currently an empty class, so any object files using
that class will end up with their own copy of its typeinfo, typeinfo
name and vtable, leading to unnecessary duplication that has to be
resolved by the dynamic linker. Instead, give bad_function_call a key
function and put a definition for that key function in libc++ itself, to
centralize the typeinfo and vtable.

This is consistent with the behavior for other exception classes. The
key functions are defined in libc++ rather than libc++abi since the
class is defined in the libc++ versioning namespace, so ABI
compatibility with libstdc++ is not a concern.

Guard this change behind an ABI macro, since it isn't backwards
compatible (i.e., clients built against the new libc++ headers wouldn't
be able to run against an older libc++ library).

Reviewers: mclow.lists, EricWF

Subscribers: mgorny, cfe-commits

Differential Revision: https://reviews.llvm.org/D27387

llvm-svn: 298937
2017-03-28 19:33:31 +00:00
..
experimental Implement LWG 2787 - [file_status.cons] is inconsistent 2017-03-06 21:02:06 +00:00
ext Refer to _LIBCPP_MSVC macro where applicable 2017-02-06 05:26:49 +00:00
support Add _LIBCPP_COMPILER_[CLANG|GCC|MSVC|IBM] macros. 2017-01-06 21:42:58 +00:00
CMakeLists.txt Simplify CMake target for the __generated_config header 2017-01-03 11:18:17 +00:00
__bit_reference Add _LIBCPP_COMPILER_[CLANG|GCC|MSVC|IBM] macros. 2017-01-06 21:42:58 +00:00
__bsd_locale_defaults.h Reorganize _LIBCPP_LOCALE__L_EXTENSIONS 2016-03-09 15:39:39 +00:00
__bsd_locale_fallbacks.h Reorganize _LIBCPP_LOCALE__L_EXTENSIONS 2016-03-09 15:39:39 +00:00
__config [libc++] Add a key function for bad_function_call 2017-03-28 19:33:31 +00:00
__config_site.in [libc++] Cleanup and document <__threading_support> 2017-01-06 20:05:40 +00:00
__debug [libc++] Introduce _LIBCPP_EXTERN_VIS to fix __libcpp_debug_function link errors 2017-01-16 21:01:00 +00:00
__functional_03 [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
__functional_base Implement P0513R0 - "Poisoning the Hash" 2017-01-21 00:02:12 +00:00
__functional_base_03 [libcxx] Rewrite C++03 __invoke. 2015-08-26 20:15:02 +00:00
__hash_table Fix hash requirements check in __hash_table. 2017-03-03 22:35:58 +00:00
__libcpp_version Update version to 5.0 2017-01-13 18:29:56 +00:00
__locale [libc++] Make _LIBCPP_TYPE_VIS export members 2017-03-02 03:22:18 +00:00
__mutex_base Implement Pp0156r2: 'Variadic Lock Guard, version 5' Reviewed as https://reviews.llvm.org/D31163. 2017-03-24 03:40:36 +00:00
__nullptr [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
__refstring [libc++] Fix modules build - Rework __refstring definition 2016-10-25 19:33:14 +00:00
__split_buffer Cleanup: move visibility/linkage attributes to the first declaration. 2015-11-07 01:22:13 +00:00
__sso_allocator [libc++] Tolerate presence of __deallocate macro 2017-01-07 03:01:24 +00:00
__std_stream clean up some qualifier casting 2016-12-31 18:13:34 +00:00
__string Use the new __has_feature(cxx_constexpr_string_builtins) for detection of the C-string intrinsics for constexpr support in std::char_traits. Thanks to Richard for the intrisic support. 2017-01-26 06:58:29 +00:00
__threading_support Revert "threading_support: make __thread_sleep_for be alertable" 2017-02-18 19:28:43 +00:00
__tree Undefine min/max in __tree 2017-02-04 20:27:46 +00:00
__tuple [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
__undef_min_max Refer to _LIBCPP_MSVC macro where applicable 2017-02-06 05:26:49 +00:00
algorithm Remove random_shuffle in C++17. Please use shuffle instead. If you have to, you cant get it back by defining _LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE before including any libc++ headers. 2017-03-23 13:43:37 +00:00
any [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
array Implement the missing constexpr stuff in <array>. Fixes PR#31645. 2017-01-16 03:02:10 +00:00
atomic Diagnose invalid memory orderings in <atomic> 2017-01-13 23:45:39 +00:00
bitset [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
cassert
ccomplex
cctype Put back the undefs that Richard removed. Boost won't build w/o these; specifically the file 'bytes_methods.h' in Apple's python framework defines these. 2016-04-04 22:49:20 +00:00
cerrno Split <errno.h> out of <cerrno>. 2015-10-08 20:37:11 +00:00
cfenv Fix incorrect file header. This is <cfenv> not <cctype>. 2015-10-08 21:17:21 +00:00
cfloat Split <float.h> out of <cfloat>. 2015-10-08 20:37:44 +00:00
chrono Implement P0548: 'common_type and duration' This involves a subtle change in the return type of the unary +/- operators for std::chrono::duration, though I expect that no one will notice. 2017-03-21 18:38:57 +00:00
cinttypes Split <inttypes.h> out of <cinttypes>. 2015-10-08 20:38:53 +00:00
ciso646
climits
clocale Make support for thread-unsafe C functions optional. 2015-06-24 08:44:38 +00:00
cmath math: fix typo in macro 2017-02-17 23:08:44 +00:00
codecvt [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
complex [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
complex.h PR25118: move system_header pragma before uses of include_next to avoid extension warnings for people finding libc++ headers via -I paths. 2015-10-09 00:26:50 +00:00
condition_variable [libc++] Make _LIBCPP_TYPE_VIS export members 2017-03-02 03:22:18 +00:00
csetjmp Split <setjmp.h> out of <csetjmp>. 2015-10-08 20:41:26 +00:00
csignal
cstdarg
cstdbool
cstddef Implement P0298R3: 'std::byte'. Reviewed as https://reviews.llvm.org/D31022 2017-03-24 05:45:39 +00:00
cstdint
cstdio [libc++] Remove unnecessary MSVCRT exclusions 2016-11-08 03:31:42 +00:00
cstdlib Remove mblen(), mbtowc() and wctomb() from the thread-unsafe functions. 2016-12-30 10:44:00 +00:00
cstring Fix overload sets of strchr, strpbrk, strrchr, memchr and strstr from 2016-02-10 00:59:02 +00:00
ctgmath
ctime Make support for thread-unsafe C functions optional. 2015-06-24 08:44:38 +00:00
ctype.h PR25118: move system_header pragma before uses of include_next to avoid extension warnings for people finding libc++ headers via -I paths. 2015-10-09 00:26:50 +00:00
cwchar [libc++] Remove unnecessary MSVCRT exclusions 2016-11-08 03:31:42 +00:00
cwctype Split <wctype.h> out of <cwctype>. 2015-10-09 19:57:37 +00:00
deque Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680. 2017-01-24 23:09:12 +00:00
errno.h Cleanup foo.h headers and __config to work in C 2015-11-06 06:30:12 +00:00
exception Implement LWG2784, and mark 2786, 2795, 2804, 2812, 2826, 2834, 2837 and 2838 as complete - since we do them already 2017-03-14 17:08:47 +00:00
float.h Cleanup foo.h headers and __config to work in C 2015-11-06 06:30:12 +00:00
forward_list Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680. 2017-01-24 23:09:12 +00:00
fstream [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
functional [libc++] Add a key function for bad_function_call 2017-03-28 19:33:31 +00:00
future [libc++] Make _LIBCPP_TYPE_VIS export members 2017-03-02 03:22:18 +00:00
initializer_list [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
inttypes.h [include] Declare __STDC_*_MACROS for C++11 compat in old libc 2016-09-26 20:20:00 +00:00
iomanip Move 'quoted' for string_view from <string_view> to <iomanip> (where the other versions of 'quoted' live. No functional change. 2016-10-27 15:10:07 +00:00
ios Fix merge conflict caused by r291921 2017-01-13 18:25:13 +00:00
iosfwd [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
iostream Make the presence of stdin and stdout optional. 2015-03-26 14:35:46 +00:00
istream Replace _LIBCPP_HAS_NO_DELETED_FUNCTIONS with _LIBCPP_CXX03_LANG 2017-01-06 20:58:25 +00:00
iterator [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
limits [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
limits.h [libcxx] Fix gcc build. 2016-10-10 15:56:01 +00:00
list Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680. 2017-01-24 23:09:12 +00:00
locale [libc++] Make _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS export members 2017-03-02 03:02:50 +00:00
locale.h [libcxx] Implement locale.h to fix modules build 2016-11-19 01:14:15 +00:00
map Add _LIBCPP_DIAGNOSE_WARNING and _LIBCPP_DIAGNOSE_ERROR macros. 2017-01-13 22:02:08 +00:00
math.h math: add type promoting template definition on MSVCRT 2017-02-18 19:28:38 +00:00
memory Implement P0599: 'noexcept for hash functions'. Fix a couple of hash functions (optional<T> and unique_ptr<T>) which were mistakenly marked as 'noexcept'. Reviewed as https://reviews.llvm.org/D31234 2017-03-23 02:40:28 +00:00
module.modulemap [libc++] Tolerate presence of __deallocate macro 2017-01-07 03:01:24 +00:00
mutex Move the scoped_lock inside the '#ifndef NO_THREADS' block to fix the no-threading build 2017-03-24 05:19:15 +00:00
new Recommit "Split exception.cpp and new.cpp implementation into different files for different runtimes." 2017-02-10 08:57:35 +00:00
numeric Make lcm/gcd work better in edge cases. Fixes a UBSAN failure. 2017-02-10 20:49:08 +00:00
optional Implement P0599: 'noexcept for hash functions'. Fix a couple of hash functions (optional<T> and unique_ptr<T>) which were mistakenly marked as 'noexcept'. Reviewed as https://reviews.llvm.org/D31234 2017-03-23 02:40:28 +00:00
ostream Replace _LIBCPP_HAS_NO_DELETED_FUNCTIONS with _LIBCPP_CXX03_LANG 2017-01-06 20:58:25 +00:00
queue Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680. 2017-01-24 23:09:12 +00:00
random [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
ratio [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
regex Replace identifiers called `__out` because Windows.h #defines it. 2017-01-07 11:27:06 +00:00
scoped_allocator [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
set [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
setjmp.h Cleanup foo.h headers and __config to work in C 2015-11-06 06:30:12 +00:00
shared_mutex Implement Pp0156r2: 'Variadic Lock Guard, version 5' Reviewed as https://reviews.llvm.org/D31163. 2017-03-24 03:40:36 +00:00
sstream [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
stack Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680. 2017-01-24 23:09:12 +00:00
stdbool.h Add stdbool.h wrapper for libc++ 2016-02-20 00:16:41 +00:00
stddef.h Check for musl-libc's max_align_t in addition to other variants. 2017-02-10 01:27:42 +00:00
stdexcept Fix unused parameters and variables 2016-12-23 23:37:52 +00:00
stdint.h [include] Declare __STDC_*_MACROS for C++11 compat in old libc 2016-09-26 20:20:00 +00:00
stdio.h Split <stdio.h> out of <cstdio>. 2015-10-09 01:29:09 +00:00
stdlib.h Cleanup foo.h headers and __config to work in C 2015-11-06 06:30:12 +00:00
streambuf [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
string Implement LWG#2761: 'basic_string should require that charT match traits::char_type'. Tests for string_view, too 2017-03-15 18:41:11 +00:00
string.h Instead of asking glibc to provide correct C++ signatures for <string.h> 2016-02-11 23:51:02 +00:00
string_view Implement LWG#2761: 'basic_string should require that charT match traits::char_type'. Tests for string_view, too 2017-03-15 18:41:11 +00:00
strstream
system_error Add ABI option to remove recently inlined __shared_count functions from the library. 2017-01-17 03:16:26 +00:00
tgmath.h
thread Implement P0599: 'noexcept for hash functions'. Fix a couple of hash functions (optional<T> and unique_ptr<T>) which were mistakenly marked as 'noexcept'. Reviewed as https://reviews.llvm.org/D31234 2017-03-23 02:40:28 +00:00
tuple Implement LWG 2773 - std::ignore should be constexpr. 2017-02-06 01:25:31 +00:00
type_traits Implement P0298R3: 'std::byte'. Reviewed as https://reviews.llvm.org/D31022 2017-03-24 05:45:39 +00:00
typeindex [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
typeinfo Recommit "Split exception.cpp and new.cpp implementation into different files for different runtimes." 2017-02-10 08:57:35 +00:00
unordered_map Diagnose non-const-callable hash functions and comparators 2017-01-13 22:42:53 +00:00
unordered_set [NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS 2017-01-04 23:56:00 +00:00
utility Fix hash requirements check in __hash_table. 2017-03-03 22:35:58 +00:00
valarray [libc++] Tolerate presence of __deallocate macro 2017-01-07 03:01:24 +00:00
variant Implement P0599: 'noexcept for hash functions'. Fix a couple of hash functions (optional<T> and unique_ptr<T>) which were mistakenly marked as 'noexcept'. Reviewed as https://reviews.llvm.org/D31234 2017-03-23 02:40:28 +00:00
vector [libcxx] Improve code generation for vector::clear(). 2017-03-23 14:39:23 +00:00
wchar.h Fix overload sets of strchr, strpbrk, strrchr, memchr and strstr from 2016-02-10 00:59:02 +00:00
wctype.h Split <wctype.h> out of <cwctype>. 2015-10-09 19:57:37 +00:00