[libcxx-commits] [libcxx] [NFC][libc++] Removes Clang 16 work-arounds. (PR #91636)
Mark de Wever via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Apr 8 10:09:55 PDT 2025
https://github.com/mordante updated https://github.com/llvm/llvm-project/pull/91636
>From 4f86bca89ad17cbfa1e941415892dd51ad518432 Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Thu, 9 May 2024 19:46:37 +0200
Subject: [PATCH 1/2] [NFC][libc++] Removes Clang 16 work-arounds.
This was noticed while reviewing the implementation status of
P1614R2 The Mothership has Landed
Drive-by: Add some missing _LIBCPP_HIDE_FROM_ABIs.
---
libcxx/include/queue | 9 +++++++--
libcxx/include/stack | 15 +++++++++++----
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/libcxx/include/queue b/libcxx/include/queue
index ff69d75591deb..ae8593924881c 100644
--- a/libcxx/include/queue
+++ b/libcxx/include/queue
@@ -428,6 +428,12 @@ public:
template <class _T1, class _OtherContainer>
friend _LIBCPP_HIDE_FROM_ABI bool
operator<(const queue<_T1, _OtherContainer>& __x, const queue<_T1, _OtherContainer>& __y);
+
+#if _LIBCPP_STD_VER >= 20
+ template <class _T1, three_way_comparable _OtherContainer>
+ friend _LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_OtherContainer>
+ operator<=>(const queue<_T1, _OtherContainer>& __x, const queue<_T1, _OtherContainer>& __y);
+#endif
};
# if _LIBCPP_STD_VER >= 17
@@ -497,8 +503,7 @@ inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const queue<_Tp, _Container>& __x,
template <class _Tp, three_way_comparable _Container>
_LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_Container>
operator<=>(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) {
- // clang 16 bug: declaring `friend operator<=>` causes "use of overloaded operator '*' is ambiguous" errors
- return __x.__get_container() <=> __y.__get_container();
+ return __x.c <=> __y.c;
}
# endif
diff --git a/libcxx/include/stack b/libcxx/include/stack
index 3ff3df2c9650f..6783bcfa5d0b4 100644
--- a/libcxx/include/stack
+++ b/libcxx/include/stack
@@ -279,10 +279,18 @@ public:
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const _Container& __get_container() const { return c; }
template <class _T1, class _OtherContainer>
- friend bool operator==(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
+ friend _LIBCPP_HIDE_FROM_ABI bool
+ operator==(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
template <class _T1, class _OtherContainer>
- friend bool operator<(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
+ friend _LIBCPP_HIDE_FROM_ABI bool
+ operator<(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
+
+#if _LIBCPP_STD_VER >= 20
+ template <class _T1, three_way_comparable _OtherContainer>
+ friend _LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_OtherContainer>
+ operator<=>(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
+#endif
};
# if _LIBCPP_STD_VER >= 17
@@ -353,8 +361,7 @@ inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const stack<_Tp, _Container>& __x,
template <class _Tp, three_way_comparable _Container>
_LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_Container>
operator<=>(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y) {
- // clang 16 bug: declaring `friend operator<=>` causes "use of overloaded operator '*' is ambiguous" errors
- return __x.__get_container() <=> __y.__get_container();
+ return __x.c <=> __y.c;
}
# endif
>From 2b799e90e8c0833be62271b70f44559c20a886cb Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Tue, 8 Apr 2025 19:09:42 +0200
Subject: [PATCH 2/2] Fixes formatting.
---
libcxx/include/queue | 4 ++--
libcxx/include/stack | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/libcxx/include/queue b/libcxx/include/queue
index ae8593924881c..5bdc0e7e01dd0 100644
--- a/libcxx/include/queue
+++ b/libcxx/include/queue
@@ -429,11 +429,11 @@ public:
friend _LIBCPP_HIDE_FROM_ABI bool
operator<(const queue<_T1, _OtherContainer>& __x, const queue<_T1, _OtherContainer>& __y);
-#if _LIBCPP_STD_VER >= 20
+# if _LIBCPP_STD_VER >= 20
template <class _T1, three_way_comparable _OtherContainer>
friend _LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_OtherContainer>
operator<=>(const queue<_T1, _OtherContainer>& __x, const queue<_T1, _OtherContainer>& __y);
-#endif
+# endif
};
# if _LIBCPP_STD_VER >= 17
diff --git a/libcxx/include/stack b/libcxx/include/stack
index 6783bcfa5d0b4..c5cbfc9bf6e65 100644
--- a/libcxx/include/stack
+++ b/libcxx/include/stack
@@ -286,11 +286,11 @@ public:
friend _LIBCPP_HIDE_FROM_ABI bool
operator<(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
-#if _LIBCPP_STD_VER >= 20
+# if _LIBCPP_STD_VER >= 20
template <class _T1, three_way_comparable _OtherContainer>
friend _LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_OtherContainer>
operator<=>(const stack<_T1, _OtherContainer>& __x, const stack<_T1, _OtherContainer>& __y);
-#endif
+# endif
};
# if _LIBCPP_STD_VER >= 17
More information about the libcxx-commits
mailing list