[libcxx-commits] [libcxx] [libc++] Remove <atomic> includes from <stop_token> (PR #201710)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Jun 5 04:36:43 PDT 2026
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/201710
>From 6b9714cac89442b44192464e06c66a4863e6ed7c 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..0669c816cab2b 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_REMOVE_TRANSITIVE_INCLUDES) && _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