forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[libc++][C++03] Copy the LLVM 19 headers (llvm#108999)
This is the first part of the "Freezing C++03 headers" proposal explained in https://discourse.llvm.org/t/rfc-freezing-c-03-headers-in-libc/77319/58. This patch mechanically copies the headers as of the LLVM 19.1 release into a subdirectory of libc++ so that we can start using these headers when building in C++03 mode. We are going to be backporting important changes to that copy of the headers until the LLVM 21 release. After the LLVM 21 release, only critical bugfixes will be fixed in the C++03 copy of the headers. This patch only performs a copy of the headers -- these headers are still unused by the rest of the codebase.
- Loading branch information
1 parent
b90d33a
commit 5c202f0
Showing
1,019 changed files
with
199,795 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// -*- C++ -*- | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_ADJACENT_FIND_H | ||
#define _LIBCPP___ALGORITHM_ADJACENT_FIND_H | ||
|
||
#include <__algorithm/comp.h> | ||
#include <__algorithm/iterator_operations.h> | ||
#include <__config> | ||
#include <__iterator/iterator_traits.h> | ||
#include <__utility/move.h> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_PUSH_MACROS | ||
#include <__undef_macros> | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
template <class _Iter, class _Sent, class _BinaryPredicate> | ||
_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter | ||
__adjacent_find(_Iter __first, _Sent __last, _BinaryPredicate&& __pred) { | ||
if (__first == __last) | ||
return __first; | ||
_Iter __i = __first; | ||
while (++__i != __last) { | ||
if (__pred(*__first, *__i)) | ||
return __first; | ||
__first = __i; | ||
} | ||
return __i; | ||
} | ||
|
||
template <class _ForwardIterator, class _BinaryPredicate> | ||
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator | ||
adjacent_find(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred) { | ||
return std::__adjacent_find(std::move(__first), std::move(__last), __pred); | ||
} | ||
|
||
template <class _ForwardIterator> | ||
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator | ||
adjacent_find(_ForwardIterator __first, _ForwardIterator __last) { | ||
return std::adjacent_find(std::move(__first), std::move(__last), __equal_to()); | ||
} | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
_LIBCPP_POP_MACROS | ||
|
||
#endif // _LIBCPP___ALGORITHM_ADJACENT_FIND_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// -*- C++ -*- | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_ALL_OF_H | ||
#define _LIBCPP___ALGORITHM_ALL_OF_H | ||
|
||
#include <__config> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
template <class _InputIterator, class _Predicate> | ||
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool | ||
all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { | ||
for (; __first != __last; ++__first) | ||
if (!__pred(*__first)) | ||
return false; | ||
return true; | ||
} | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
#endif // _LIBCPP___ALGORITHM_ALL_OF_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// -*- C++ -*- | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_ANY_OF_H | ||
#define _LIBCPP___ALGORITHM_ANY_OF_H | ||
|
||
#include <__config> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
template <class _InputIterator, class _Predicate> | ||
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool | ||
any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { | ||
for (; __first != __last; ++__first) | ||
if (__pred(*__first)) | ||
return true; | ||
return false; | ||
} | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
#endif // _LIBCPP___ALGORITHM_ANY_OF_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_BINARY_SEARCH_H | ||
#define _LIBCPP___ALGORITHM_BINARY_SEARCH_H | ||
|
||
#include <__algorithm/comp.h> | ||
#include <__algorithm/comp_ref_type.h> | ||
#include <__algorithm/lower_bound.h> | ||
#include <__config> | ||
#include <__iterator/iterator_traits.h> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
template <class _ForwardIterator, class _Tp, class _Compare> | ||
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool | ||
binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { | ||
__first = std::lower_bound<_ForwardIterator, _Tp, __comp_ref_type<_Compare> >(__first, __last, __value, __comp); | ||
return __first != __last && !__comp(__value, *__first); | ||
} | ||
|
||
template <class _ForwardIterator, class _Tp> | ||
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool | ||
binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { | ||
return std::binary_search(__first, __last, __value, __less<>()); | ||
} | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
#endif // _LIBCPP___ALGORITHM_BINARY_SEARCH_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_CLAMP_H | ||
#define _LIBCPP___ALGORITHM_CLAMP_H | ||
|
||
#include <__algorithm/comp.h> | ||
#include <__assert> | ||
#include <__config> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
#if _LIBCPP_STD_VER >= 17 | ||
template <class _Tp, class _Compare> | ||
[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& | ||
clamp(_LIBCPP_LIFETIMEBOUND const _Tp& __v, | ||
_LIBCPP_LIFETIMEBOUND const _Tp& __lo, | ||
_LIBCPP_LIFETIMEBOUND const _Tp& __hi, | ||
_Compare __comp) { | ||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(!__comp(__hi, __lo), "Bad bounds passed to std::clamp"); | ||
return __comp(__v, __lo) ? __lo : __comp(__hi, __v) ? __hi : __v; | ||
} | ||
|
||
template <class _Tp> | ||
[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& | ||
clamp(_LIBCPP_LIFETIMEBOUND const _Tp& __v, | ||
_LIBCPP_LIFETIMEBOUND const _Tp& __lo, | ||
_LIBCPP_LIFETIMEBOUND const _Tp& __hi) { | ||
return std::clamp(__v, __lo, __hi, __less<>()); | ||
} | ||
#endif | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
#endif // _LIBCPP___ALGORITHM_CLAMP_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_COMP_H | ||
#define _LIBCPP___ALGORITHM_COMP_H | ||
|
||
#include <__config> | ||
#include <__type_traits/desugars_to.h> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
struct __equal_to { | ||
template <class _T1, class _T2> | ||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(const _T1& __x, const _T2& __y) const { | ||
return __x == __y; | ||
} | ||
}; | ||
|
||
template <class _Tp, class _Up> | ||
inline const bool __desugars_to_v<__equal_tag, __equal_to, _Tp, _Up> = true; | ||
|
||
// The definition is required because __less is part of the ABI, but it's empty | ||
// because all comparisons should be transparent. | ||
template <class _T1 = void, class _T2 = _T1> | ||
struct __less {}; | ||
|
||
template <> | ||
struct __less<void, void> { | ||
template <class _Tp, class _Up> | ||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(const _Tp& __lhs, const _Up& __rhs) const { | ||
return __lhs < __rhs; | ||
} | ||
}; | ||
|
||
template <class _Tp> | ||
inline const bool __desugars_to_v<__less_tag, __less<>, _Tp, _Tp> = true; | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
#endif // _LIBCPP___ALGORITHM_COMP_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _LIBCPP___ALGORITHM_COMP_REF_TYPE_H | ||
#define _LIBCPP___ALGORITHM_COMP_REF_TYPE_H | ||
|
||
#include <__assert> | ||
#include <__config> | ||
#include <__utility/declval.h> | ||
|
||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | ||
# pragma GCC system_header | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
template <class _Compare> | ||
struct __debug_less { | ||
_Compare& __comp_; | ||
_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI __debug_less(_Compare& __c) : __comp_(__c) {} | ||
|
||
template <class _Tp, class _Up> | ||
_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Up& __y) { | ||
bool __r = __comp_(__x, __y); | ||
if (__r) | ||
__do_compare_assert(0, __y, __x); | ||
return __r; | ||
} | ||
|
||
template <class _Tp, class _Up> | ||
_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator()(_Tp& __x, _Up& __y) { | ||
bool __r = __comp_(__x, __y); | ||
if (__r) | ||
__do_compare_assert(0, __y, __x); | ||
return __r; | ||
} | ||
|
||
template <class _LHS, class _RHS> | ||
_LIBCPP_CONSTEXPR_SINCE_CXX14 inline | ||
_LIBCPP_HIDE_FROM_ABI decltype((void)std::declval<_Compare&>()(std::declval<_LHS&>(), std::declval<_RHS&>())) | ||
__do_compare_assert(int, _LHS& __l, _RHS& __r) { | ||
_LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(!__comp_(__l, __r), "Comparator does not induce a strict weak ordering"); | ||
(void)__l; | ||
(void)__r; | ||
} | ||
|
||
template <class _LHS, class _RHS> | ||
_LIBCPP_CONSTEXPR_SINCE_CXX14 inline _LIBCPP_HIDE_FROM_ABI void __do_compare_assert(long, _LHS&, _RHS&) {} | ||
}; | ||
|
||
// Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference. | ||
#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG | ||
template <class _Comp> | ||
using __comp_ref_type = __debug_less<_Comp>; | ||
#else | ||
template <class _Comp> | ||
using __comp_ref_type = _Comp&; | ||
#endif | ||
|
||
_LIBCPP_END_NAMESPACE_STD | ||
|
||
#endif // _LIBCPP___ALGORITHM_COMP_REF_TYPE_H |
Oops, something went wrong.