llvm-project/libcxx/include
Richard Smith bf434a5f17 Improve the representation of <compare>'s zero-only type.
* Use an empty struct instead of a member pointer to represent this
  type, so that we don't actually pass a zero member pointer at runtime.

* Mark the constructor as consteval to ensure that no code is emitted
  for it whenever possible.

* Add a honeypot constructor to reject all non-int arguments, so that
  the only argument that can arrive at the real constructor is the
  literal 0.

This results in better generated code, and rejecting invalid comparisons
against nullptr, 0L, and so on, while also rejecting invalid comparisons
against (1-1) and similar that would be allowed if we required an
integer constant expression with value 0.

Differential Revision: https://reviews.llvm.org/D85051
2020-09-29 15:44:05 -07:00
..
experimental [NFC] Strip trailing whitespace from libc++ 2019-10-23 11:19:19 -07:00
ext [libc++] Remove workarounds for missing rvalue references 2020-08-12 12:02:28 -04:00
support [libcxx] [Windows] Store the lconv struct returned from localeconv in locale_t 2020-01-29 22:37:11 +02:00
CMakeLists.txt [libc++] Use a proper CMake target to represent libc++ headers 2020-07-14 09:52:58 -04:00
__bit_reference [libc++] Fix ABI break in __bit_reference. 2020-02-19 12:02:06 -05:00
__bsd_locale_defaults.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
__bsd_locale_fallbacks.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
__config Improve the representation of <compare>'s zero-only type. 2020-09-29 15:44:05 -07:00
__config_site.in [libc++] Fix the LIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT setting 2020-05-29 06:14:30 -04:00
__debug [libc++][NFC] Remove excess trailing newlines from most files 2019-10-23 08:08:57 -07:00
__errc Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
__functional_03 [libc++] Properly mark std::function as deprecated in C++03 2020-03-10 17:45:39 -04:00
__functional_base [libc++] Fix unintended ADL inside ref(reference_wrapper<T>) and cref(reference_wrapper<T>) 2020-02-20 12:22:21 -05:00
__functional_base_03 Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
__hash_table [libc++] Remove workarounds for missing rvalue references 2020-08-12 12:02:28 -04:00
__libcpp_version Bump the trunk major version to 12 2020-07-15 12:05:05 +02:00
__locale Upstream Bionic definitions of ctype_base/regex. 2020-04-06 13:38:16 -07:00
__mutex_base [libc++] Ensure __config always defines certain configuration macros. 2019-12-13 15:42:07 -05:00
__node_handle Avoid name conflict with kernel headers 2019-04-24 09:43:44 +00:00
__nullptr Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
__split_buffer [libc++] Rework compressed pair constructors. 2019-12-16 18:38:58 -05:00
__sso_allocator [libc++] Replace uses of __libcpp_allocate by std::allocator<> 2020-09-28 16:09:42 -04:00
__std_stream Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
__string Add optimization to basic_string::assign for compile-time known constant values. 2020-06-29 14:34:34 -04:00
__threading_support [libc++][NFC] Define functor's call operator inline 2020-08-27 14:20:34 -04:00
__tree Fixes complexity of map insert_or_assign with a hint. 2020-09-19 16:28:55 +02:00
__tuple Refactor default constructor SFINAE in pair and tuple. 2019-09-30 20:55:30 +00:00
__undef_macros Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
algorithm [Take 2] [libc++] Make rotate a constexpr. 2020-09-14 18:14:46 -04:00
any [libc++] Fix failures when running the test suite without RTTI 2020-09-21 20:17:24 -04:00
array [libc++] Add assertions on OOB accesses in std::array when the debug mode is enabled 2020-06-01 16:37:39 -04:00
atomic Re-split integral & pointer overloads. Add tests. 2020-09-11 12:13:35 -07:00
barrier [libc++] Add availability markup for the C++20 Synchronization Library on Apple 2020-04-06 18:07:26 -04:00
bit [libc++] NFC: Remove outdated numbering in <bit> synopsis 2020-05-28 14:31:21 -04:00
bitset Ensure bitset's string constructor doesn't poison the overload set. 2019-07-01 19:59:34 +00:00
cassert Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
ccomplex Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cctype Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cerrno Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cfenv Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cfloat Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
charconv [libc++] Mark __u64toa and __u32toa as noexcept 2020-05-22 16:11:44 -04:00
chrono [libc++] Avoid UB in year_month_day_last::day() for incorrect months 2020-06-09 13:43:13 -04:00
cinttypes Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ciso646 Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
climits Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
clocale Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cmath [libc++] [LWG3201] Update status page: lerp should be marked noexcept. 2020-05-25 22:28:21 +02:00
codecvt Fix -Wdeprecated-copy-dtor and -Wdeprecated-dynamic-exception-spec warnings. 2020-03-17 18:59:54 +01:00
compare Improve the representation of <compare>'s zero-only type. 2020-09-29 15:44:05 -07:00
complex [libc++] Fix ostream for complex numbers with fixed field width 2020-05-07 13:51:07 -04:00
complex.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
concepts [libcxx] Adds [concept.same] 2020-04-08 18:00:13 -04:00
condition_variable Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
csetjmp Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
csignal Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cstdarg Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cstdbool Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cstddef Avoid using std::max_align_t in pre-C++11 mode 2020-04-04 01:38:41 +02:00
cstdint Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cstdio Reland: Don't expose unavailable cstdio functions. 2020-04-16 12:51:08 -07:00
cstdlib Fix _LIBCPP_HAS_ definitions for Android. 2019-11-18 12:19:58 -08:00
cstring Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ctgmath Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
ctime [libc++] Avoid including <sys/cdefs.h> on non-Apple platforms in <ctime> 2020-09-02 18:11:26 -04:00
ctype.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cwchar Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
cwctype Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
deque [libc++][P1115][C++20] Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if. 2020-05-02 14:04:50 +02:00
errno.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
exception Fix -Wdeprecated-copy-dtor and -Wdeprecated-dynamic-exception-spec warnings. 2020-03-17 18:59:54 +01:00
execution [pstl][libc++] Provide uglified header names for interface headers 2019-08-06 21:11:24 +00:00
fenv.h Mark fenv.h as a system header before the #include_next directive 2019-03-29 16:03:57 +00:00
filesystem Fix -Wdeprecated-copy-dtor and -Wdeprecated-dynamic-exception-spec warnings. 2020-03-17 18:59:54 +01:00
float.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
forward_list [libc++][P1115][C++20] Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if. 2020-05-02 14:04:50 +02:00
fstream Open fstream files in O_CLOEXEC mode when possible. 2019-09-16 19:26:41 +00:00
functional [libc++] Avoid including <Block.h> from <functional> 2020-07-31 14:22:28 -04:00
future [libc++] Remove some workarounds for missing variadic templates 2020-09-17 11:05:39 -04:00
initializer_list [NFC][libcxx] Remove trailing whitespace 2019-05-29 16:01:36 +00:00
inttypes.h AIX system headers need stdint.h and inttypes.h to be re-enterable 2019-06-20 15:36:32 +00:00
iomanip [NFC][libcxx] Remove trailing whitespace 2019-05-29 16:01:36 +00:00
ios [libc++] Implement P0551 2020-07-13 13:42:26 -04:00
iosfwd Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
iostream Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
istream [libc++] Re-apply fdc41e11f (LWG1203) without breaking the C++11 build 2020-09-23 08:56:00 -04:00
iterator [libc++] Add missing friend keyword 2020-09-15 14:21:05 -04:00
latch [libc++] Add availability markup for the C++20 Synchronization Library on Apple 2020-04-06 18:07:26 -04:00
limits Fix -Wdouble-promotion warnings. 2019-07-01 16:13:31 +00:00
limits.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
list [libc++][P1115][C++20] Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if. 2020-05-02 14:04:50 +02:00
locale [NFC][libcxx] Remove trailing whitespace 2019-05-29 16:01:36 +00:00
locale.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
map Fixes complexity of map insert_or_assign with a hint. 2020-09-19 16:28:55 +02:00
math.h Reland [libc++] Move abs and div into stdlib.h to fix header cycle. 2020-05-08 21:52:27 +02:00
memory [libc++] Fix constexpr dynamic allocation on GCC 10 2020-09-28 17:44:31 -04:00
module.modulemap [libc++] Implement <numbers> 2020-06-19 14:25:02 +05:30
mutex [libc++] Mark __call_once_proxy as hidden and internal 2019-11-11 10:27:48 -05:00
new [libc++] Fix constexpr dynamic allocation on GCC 10 2020-09-28 17:44:31 -04:00
numbers [libc++] Require concepts support for <numbers> 2020-06-19 10:49:44 -04:00
numeric [libc++] Fix typo in std::midpoint 2019-12-21 01:26:24 -08:00
optional Add a missing '__uncvref_t' to the SFINAE constraints for optional's assignment operator. Fixes PR38638. Thanks to Jonathan Wakely for the report 2019-06-27 18:40:55 +00:00
ostream [libc++] Re-apply fdc41e11f (LWG1203) without breaking the C++11 build 2020-09-23 08:56:00 -04:00
queue Rename __is_foo_iterator traits to reflect their Cpp17 nature. 2019-11-18 01:49:32 -05:00
random [libc++] Bugfix to std::binomial_distribution<int> 2020-03-17 15:56:16 -04:00
ratio Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
regex [libc++] Fix some typos in the comment header for <regex> 2020-06-25 15:34:51 -04:00
scoped_allocator Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
semaphore [libc++] Add availability markup for the C++20 Synchronization Library on Apple 2020-04-06 18:07:26 -04:00
set [libc++][P1115][C++20] Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if. 2020-05-02 14:04:50 +02:00
setjmp.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
shared_mutex Revert "Suppress -Wctad-maybe-unsupported on types w/o deduction guides." 2019-08-04 07:13:43 +00:00
span [libcxx] Remove swap for std::span 2020-05-20 14:34:21 -04:00
sstream add a test and a couple minor bug fixes for the implicit-signed-integer-truncation sanitizer. This is PR#40566 2019-02-01 21:59:27 +00:00
stack [NFC][libcxx] Remove trailing whitespace 2019-05-29 16:01:36 +00:00
stdbool.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
stddef.h Avoid using std::max_align_t in pre-C++11 mode 2020-04-04 01:38:41 +02:00
stdexcept Fix -Wdeprecated-copy-dtor and -Wdeprecated-dynamic-exception-spec warnings. 2020-03-17 18:59:54 +01:00
stdint.h AIX system headers need stdint.h and inttypes.h to be re-enterable 2019-06-20 15:36:32 +00:00
stdio.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
stdlib.h Reland [libc++] Move abs and div into stdlib.h to fix header cycle. 2020-05-08 21:52:27 +02:00
streambuf Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
string Add optimization to basic_string::assign for compile-time known constant values. 2020-06-29 14:34:34 -04:00
string.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
string_view Add forward declaration of operator<< in <string_view> as required. 2019-09-25 18:56:54 +00:00
strstream Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
system_error Fix -Wdeprecated-copy-dtor and -Wdeprecated-dynamic-exception-spec warnings. 2020-03-17 18:59:54 +01:00
tgmath.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
thread [libc++] Work around gcc/Power9 bug in `include/thread` 2020-06-10 12:40:43 -04:00
tuple Add constexpr to pair 2020-09-02 21:21:24 +02:00
type_traits [libc++] Fix tests on GCC 10 2020-09-29 12:08:33 -04:00
typeindex Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
typeinfo [libc++] Fix the LIBCXX_HAS_MERGED_TYPEINFO_NAMES_DEFAULT setting 2020-05-29 06:14:30 -04:00
unordered_map [libc++] Remove workarounds for missing rvalue references 2020-08-12 12:02:28 -04:00
unordered_set [libc++][P1115][C++20] Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if. 2020-05-02 14:04:50 +02:00
utility Add constexpr to pair 2020-09-02 21:21:24 +02:00
valarray [libc++] Replace uses of __libcpp_allocate by std::allocator<> 2020-09-28 16:09:42 -04:00
variant Revert switch based variant temporarily. 2020-09-01 22:15:33 -04:00
vector Optimize 'construct at end' loops in vector 2020-06-18 13:51:12 -04:00
version [libc++] Implement C++20's P0784 (More constexpr containers) 2020-09-22 11:20:33 -04:00
wchar.h [libc++] Add missing <stddef.h> include to <wchar.h> 2020-06-25 19:27:32 -04:00
wctype.h Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00