[libcxx-commits] [libcxx] [libc++] Remove <atomic> includes from <stop_token> (PR #201710)

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Mon Jun 8 00:48:16 PDT 2026


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

>From 103cfeee10d876f79370f924f2dd30f0856320b7 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Fri, 5 Jun 2026 00:56:24 +0200
Subject: [PATCH] [libc++] Remove <atomic> includes from <stop_token>

---
 libcxx/include/__stop_token/atomic_unique_lock.h   | 3 ++-
 libcxx/include/__stop_token/intrusive_shared_ptr.h | 1 -
 libcxx/include/__stop_token/stop_state.h           | 3 ++-
 libcxx/include/condition_variable                  | 5 ++++-
 libcxx/include/stop_token                          | 4 ++++
 libcxx/include/thread                              | 5 +++++
 libcxx/test/libcxx/transitive_includes/cxx26.csv   | 3 ---
 7 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/libcxx/include/__stop_token/atomic_unique_lock.h b/libcxx/include/__stop_token/atomic_unique_lock.h
index 0792331413f52..79baa3b408464 100644
--- a/libcxx/include/__stop_token/atomic_unique_lock.h
+++ b/libcxx/include/__stop_token/atomic_unique_lock.h
@@ -10,9 +10,10 @@
 #ifndef _LIBCPP___STOP_TOKEN_ATOMIC_UNIQUE_LOCK_H
 #define _LIBCPP___STOP_TOKEN_ATOMIC_UNIQUE_LOCK_H
 
+#include <__atomic/atomic.h>
+#include <__atomic/memory_order.h>
 #include <__bit/has_single_bit.h>
 #include <__config>
-#include <atomic>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/libcxx/include/__stop_token/intrusive_shared_ptr.h b/libcxx/include/__stop_token/intrusive_shared_ptr.h
index 0d5ffe0647166..05fe9b8acb6d0 100644
--- a/libcxx/include/__stop_token/intrusive_shared_ptr.h
+++ b/libcxx/include/__stop_token/intrusive_shared_ptr.h
@@ -10,7 +10,6 @@
 #ifndef _LIBCPP___STOP_TOKEN_INTRUSIVE_SHARED_PTR_H
 #define _LIBCPP___STOP_TOKEN_INTRUSIVE_SHARED_PTR_H
 
-#include <__atomic/atomic.h>
 #include <__atomic/memory_order.h>
 #include <__config>
 #include <__cstddef/nullptr_t.h>
diff --git a/libcxx/include/__stop_token/stop_state.h b/libcxx/include/__stop_token/stop_state.h
index 74fafbdc637af..7f76392bd014a 100644
--- a/libcxx/include/__stop_token/stop_state.h
+++ b/libcxx/include/__stop_token/stop_state.h
@@ -11,11 +11,12 @@
 #define _LIBCPP___STOP_TOKEN_STOP_STATE_H
 
 #include <__assert>
+#include <__atomic/atomic.h>
+#include <__atomic/memory_order.h>
 #include <__config>
 #include <__stop_token/atomic_unique_lock.h>
 #include <__stop_token/intrusive_list_view.h>
 #include <__thread/id.h>
-#include <atomic>
 #include <cstdint>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/condition_variable b/libcxx/include/condition_variable
index a6b5f842f3bc8..0018b89f362af 100644
--- a/libcxx/include/condition_variable
+++ b/libcxx/include/condition_variable
@@ -350,8 +350,11 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <atomic>
+#  endif
+
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstdint>
 #    include <cstdlib>
diff --git a/libcxx/include/stop_token b/libcxx/include/stop_token
index 155b971d5edd9..dcfa6d44788ba 100644
--- a/libcxx/include/stop_token
+++ b/libcxx/include/stop_token
@@ -52,6 +52,10 @@ namespace std {
 
 #  endif // _LIBCPP_HAS_THREADS
 
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
+#    include <atomic>
+#  endif
+
 #  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <iosfwd>
diff --git a/libcxx/include/thread b/libcxx/include/thread
index f252273ebadcd..1c804bdd55dd6 100644
--- a/libcxx/include/thread
+++ b/libcxx/include/thread
@@ -128,6 +128,11 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
 #    include <system_error>
 #    include <type_traits>
 #  endif
+
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
+#    include <atomic>
+#  endif
+
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_THREAD
diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index d531d60ae3e35..1450a13e125ef 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -180,7 +180,6 @@ complex tuple
 complex typeinfo
 complex version
 concepts version
-condition_variable atomic
 condition_variable cerrno
 condition_variable climits
 condition_variable cstdint
@@ -876,7 +875,6 @@ stack limits
 stack stdexcept
 stack tuple
 stack version
-stop_token atomic
 stop_token climits
 stop_token cstdint
 stop_token cstring
@@ -1009,7 +1007,6 @@ system_error string_view
 system_error tuple
 system_error version
 thread array
-thread atomic
 thread bitset
 thread cctype
 thread cerrno



More information about the libcxx-commits mailing list