[libcxx-commits] [libcxx] [libc++][NFC] Simplify __to_gcc_order by avoiding constexprness (PR #220940)

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Wed Sep 9 04:32:04 PDT 2026


https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/220940

>From 8d79a8d3bfff7d16a556fbaa68a84fe6afd20ad3 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Thu, 3 Sep 2026 15:05:47 +0200
Subject: [PATCH] [libc++][NFC] Simplify __to_gcc_order by avoiding
 constexprness

---
 libcxx/include/__atomic/to_gcc_order.h | 55 +++++++++++++++-----------
 1 file changed, 33 insertions(+), 22 deletions(-)

diff --git a/libcxx/include/__atomic/to_gcc_order.h b/libcxx/include/__atomic/to_gcc_order.h
index d04c111addd31..57741794aa591 100644
--- a/libcxx/include/__atomic/to_gcc_order.h
+++ b/libcxx/include/__atomic/to_gcc_order.h
@@ -11,6 +11,7 @@
 
 #include <__atomic/memory_order.h>
 #include <__config>
+#include <__utility/unreachable.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
@@ -21,30 +22,40 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 #if defined(__ATOMIC_RELAXED) && defined(__ATOMIC_CONSUME) && defined(__ATOMIC_ACQUIRE) &&                             \
     defined(__ATOMIC_RELEASE) && defined(__ATOMIC_ACQ_REL) && defined(__ATOMIC_SEQ_CST)
 
-_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR int __to_gcc_order(memory_order __order) {
-  // Avoid switch statement to make this a constexpr.
-  return __order == memory_order_relaxed
-           ? __ATOMIC_RELAXED
-           : (__order == memory_order_acquire
-                  ? __ATOMIC_ACQUIRE
-                  : (__order == memory_order_release
-                         ? __ATOMIC_RELEASE
-                         : (__order == memory_order_seq_cst
-                                ? __ATOMIC_SEQ_CST
-                                : (__order == memory_order_acq_rel ? __ATOMIC_ACQ_REL : __ATOMIC_CONSUME))));
+_LIBCPP_HIDE_FROM_ABI inline int __to_gcc_order(memory_order __order) {
+  switch (__order) {
+  case memory_order_relaxed:
+    return __ATOMIC_RELAXED;
+  case memory_order_acquire:
+    return __ATOMIC_ACQUIRE;
+  case memory_order_release:
+    return __ATOMIC_RELEASE;
+  case memory_order_acq_rel:
+    return __ATOMIC_ACQ_REL;
+  case memory_order_seq_cst:
+    return __ATOMIC_SEQ_CST;
+  case memory_order_consume:
+    return __ATOMIC_CONSUME;
+  }
+  std::__libcpp_unreachable();
 }
 
-_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR int __to_gcc_failure_order(memory_order __order) {
-  // Avoid switch statement to make this a constexpr.
-  return __order == memory_order_relaxed
-           ? __ATOMIC_RELAXED
-           : (__order == memory_order_acquire
-                  ? __ATOMIC_ACQUIRE
-                  : (__order == memory_order_release
-                         ? __ATOMIC_RELAXED
-                         : (__order == memory_order_seq_cst
-                                ? __ATOMIC_SEQ_CST
-                                : (__order == memory_order_acq_rel ? __ATOMIC_ACQUIRE : __ATOMIC_CONSUME))));
+_LIBCPP_HIDE_FROM_ABI inline int __to_gcc_failure_order(memory_order __order) {
+  switch (__order) {
+  case memory_order_relaxed:
+    return __ATOMIC_RELAXED;
+  case memory_order_acquire:
+    return __ATOMIC_ACQUIRE;
+  case memory_order_release:
+    return __ATOMIC_RELAXED;
+  case memory_order_seq_cst:
+    return __ATOMIC_SEQ_CST;
+  case memory_order_acq_rel:
+    return __ATOMIC_ACQUIRE;
+  case memory_order_consume:
+    return __ATOMIC_CONSUME;
+  }
+  std::__libcpp_unreachable();
 }
 
 #endif



More information about the libcxx-commits mailing list