[libc++] Rename the macro for the LLVM 18 ABI tag used in ranges (#208464)
We typically use macros like _LIBCPP_ABI_XYZ for ABI settings that can be configured by the user. Since _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS is not one of those, rename it to make it clearer it's an ABI tag attribute. As a drive-by remove the definition in the frozen C++03 config header since it should never be needed (Ranges are not provided in C++03).
This commit is contained in:
parent
c93aefbd97
commit
0faf45cd65
9 changed files with 8 additions and 18 deletions
|
|
@ -96,7 +96,7 @@
|
|||
//
|
||||
// To fix the bug we had to change the ABI of some classes to remove [[no_unique_address]] under certain conditions.
|
||||
// The macro below is used for all classes whose ABI have changed as part of fixing these bugs.
|
||||
#define _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS __attribute__((__abi_tag__("llvm18_nua")))
|
||||
#define _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG __attribute__((__abi_tag__("llvm18_nua")))
|
||||
|
||||
// [[msvc::no_unique_address]] seems to mostly affect empty classes, so the padding scheme for Itanium doesn't work.
|
||||
#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_ABI_NO_COMPRESSED_PAIR_PADDING)
|
||||
|
|
|
|||
|
|
@ -121,16 +121,6 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
// We had some bugs where we use [[no_unique_address]] together with construct_at,
|
||||
// which causes UB as the call on construct_at could write to overlapping subobjects
|
||||
//
|
||||
// https://github.com/llvm/llvm-project/issues/70506
|
||||
// https://github.com/llvm/llvm-project/issues/70494
|
||||
//
|
||||
// To fix the bug we had to change the ABI of some classes to remove [[no_unique_address]] under certain conditions.
|
||||
// The macro below is used for all classes whose ABI have changed as part of fixing these bugs.
|
||||
#define _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS __attribute__((__abi_tag__("llvm18_nua")))
|
||||
|
||||
// Changes the iterator type of select containers (see below) to a bounded iterator that keeps track of whether it's
|
||||
// within the bounds of the original container and asserts it on every dereference.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ namespace ranges {
|
|||
|
||||
template <forward_range _View, indirect_binary_predicate<iterator_t<_View>, iterator_t<_View>> _Pred>
|
||||
requires view<_View> && is_object_v<_Pred>
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS chunk_by_view : public view_interface<chunk_by_view<_View, _Pred>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG chunk_by_view : public view_interface<chunk_by_view<_View, _Pred>> {
|
||||
_LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
|
||||
_LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Pred> __pred_;
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ namespace ranges {
|
|||
|
||||
template <view _View, class _Pred>
|
||||
requires input_range<_View> && is_object_v<_Pred> && indirect_unary_predicate<const _Pred, iterator_t<_View>>
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS drop_while_view : public view_interface<drop_while_view<_View, _Pred>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG drop_while_view : public view_interface<drop_while_view<_View, _Pred>> {
|
||||
public:
|
||||
_LIBCPP_HIDE_FROM_ABI drop_while_view()
|
||||
requires default_initializable<_View> && default_initializable<_Pred>
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
|||
namespace ranges {
|
||||
template <input_range _View, indirect_unary_predicate<iterator_t<_View>> _Pred>
|
||||
requires view<_View> && is_object_v<_Pred>
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS filter_view : public view_interface<filter_view<_View, _Pred>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG filter_view : public view_interface<filter_view<_View, _Pred>> {
|
||||
_LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
|
||||
_LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Pred> __pred_;
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ struct __fn;
|
|||
template <move_constructible _Tp, semiregular _Bound = unreachable_sentinel_t>
|
||||
requires(is_object_v<_Tp> && same_as<_Tp, remove_cv_t<_Tp>> &&
|
||||
(__integer_like_with_usable_difference_type<_Bound> || same_as<_Bound, unreachable_sentinel_t>))
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS repeat_view : public view_interface<repeat_view<_Tp, _Bound>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG repeat_view : public view_interface<repeat_view<_Tp, _Bound>> {
|
||||
friend struct views::__take::__fn;
|
||||
friend struct views::__drop::__fn;
|
||||
class __iterator;
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ template <move_constructible _Tp>
|
|||
template <copy_constructible _Tp>
|
||||
# endif
|
||||
requires is_object_v<_Tp>
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS single_view : public view_interface<single_view<_Tp>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG single_view : public view_interface<single_view<_Tp>> {
|
||||
_LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Tp> __value_;
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ namespace ranges {
|
|||
|
||||
template <view _View, class _Pred>
|
||||
requires input_range<_View> && is_object_v<_Pred> && indirect_unary_predicate<const _Pred, iterator_t<_View>>
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS take_while_view : public view_interface<take_while_view<_View, _Pred>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG take_while_view : public view_interface<take_while_view<_View, _Pred>> {
|
||||
template <bool>
|
||||
class __sentinel;
|
||||
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ template <input_range _View, move_constructible _Fn>
|
|||
template <input_range _View, copy_constructible _Fn>
|
||||
# endif
|
||||
requires __transform_view_constraints<_View, _Fn>
|
||||
class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS transform_view : public view_interface<transform_view<_View, _Fn>> {
|
||||
class _LIBCPP_LLVM18_NO_UNIQUE_ADDRESS_ABI_TAG transform_view : public view_interface<transform_view<_View, _Fn>> {
|
||||
template <bool>
|
||||
class __iterator;
|
||||
template <bool>
|
||||
|
|
|
|||
Loading…
Reference in a new issue