[libc++] Granularize chrono includes
Reviewed By: Quuxplusone, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D120141
NOKEYCHECK=True
GitOrigin-RevId: 489637e66dd38d29517d16da1afaee60485687d1
diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst
index 1e24ad6..ce13166 100644
--- a/docs/ReleaseNotes.rst
+++ b/docs/ReleaseNotes.rst
@@ -53,10 +53,10 @@
``<filesystem>`` header. The associated macro
``_LIBCPP_DEPRECATED_EXPERIMENTAL_FILESYSTEM`` has also been removed.
-- Transitive includes of ``<algorithm>`` have been removed. If you see compiler errors
- related to missing declarations inside namespace ``std`` when updating libc++,
- you are probably missing ``#include <algorithm>`` in a file where you use algorithms.
-
+- Some libc++ headers no longer transitively include all of ``<algorithm>``and ``<chrono>``.
+ If, after updating libc++, you see compiler errors related to missing declarations in
+ namespace ``std``, it might be because one of your source files now needs to
+ ``#include <algorithm>`` and/or ``#include <chrono>``.
ABI Changes
-----------
diff --git a/include/__filesystem/directory_entry.h b/include/__filesystem/directory_entry.h
index a1f18ad..3db2445 100644
--- a/include/__filesystem/directory_entry.h
+++ b/include/__filesystem/directory_entry.h
@@ -11,6 +11,7 @@
#define _LIBCPP___FILESYSTEM_DIRECTORY_ENTRY_H
#include <__availability>
+#include <__chrono/time_point.h>
#include <__config>
#include <__errc>
#include <__filesystem/file_status.h>
@@ -21,7 +22,6 @@
#include <__filesystem/path.h>
#include <__filesystem/perms.h>
#include <__utility/unreachable.h>
-#include <chrono>
#include <cstdint>
#include <cstdlib>
#include <iosfwd>
diff --git a/include/__filesystem/file_time_type.h b/include/__filesystem/file_time_type.h
index 620b5ec..7c4932e 100644
--- a/include/__filesystem/file_time_type.h
+++ b/include/__filesystem/file_time_type.h
@@ -11,8 +11,9 @@
#define _LIBCPP___FILESYSTEM_FILE_TIME_TYPE_H
#include <__availability>
+#include <__chrono/file_clock.h>
+#include <__chrono/time_point.h>
#include <__config>
-#include <chrono>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__filesystem/operations.h b/include/__filesystem/operations.h
index 894c501..85c71f0 100644
--- a/include/__filesystem/operations.h
+++ b/include/__filesystem/operations.h
@@ -11,6 +11,7 @@
#define _LIBCPP___FILESYSTEM_OPERATIONS_H
#include <__availability>
+#include <__chrono/time_point.h>
#include <__config>
#include <__filesystem/copy_options.h>
#include <__filesystem/file_status.h>
@@ -20,7 +21,6 @@
#include <__filesystem/perm_options.h>
#include <__filesystem/perms.h>
#include <__filesystem/space_info.h>
-#include <chrono>
#include <cstdint>
#include <system_error>
diff --git a/include/__mutex_base b/include/__mutex_base
index 78eda08..da056b6 100644
--- a/include/__mutex_base
+++ b/include/__mutex_base
@@ -10,9 +10,12 @@
#ifndef _LIBCPP___MUTEX_BASE
#define _LIBCPP___MUTEX_BASE
+#include <__chrono/duration.h>
+#include <__chrono/steady_clock.h>
+#include <__chrono/system_clock.h>
+#include <__chrono/time_point.h>
#include <__config>
#include <__threading_support>
-#include <chrono>
#include <ratio>
#include <system_error>
#include <time.h>
diff --git a/include/__thread/poll_with_backoff.h b/include/__thread/poll_with_backoff.h
index 9b084b3..0bbafd1 100644
--- a/include/__thread/poll_with_backoff.h
+++ b/include/__thread/poll_with_backoff.h
@@ -10,8 +10,12 @@
#define _LIBCPP___THREAD_POLL_WITH_BACKOFF_H
#include <__availability>
+#include <__chrono/duration.h>
+#include <__chrono/high_resolution_clock.h>
+#include <__chrono/steady_clock.h>
+#include <__chrono/time_point.h>
#include <__config>
-#include <chrono>
+#include <__filesystem/file_time_type.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__thread/timed_backoff_policy.h b/include/__thread/timed_backoff_policy.h
index 58c2390..28fe75d 100644
--- a/include/__thread/timed_backoff_policy.h
+++ b/include/__thread/timed_backoff_policy.h
@@ -13,8 +13,8 @@
#ifndef _LIBCPP_HAS_NO_THREADS
-#include <__threading_support>
-#include <chrono>
+# include <__chrono/duration.h>
+# include <__threading_support>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__threading_support b/include/__threading_support
index 11899e6..4f1640a 100644
--- a/include/__threading_support
+++ b/include/__threading_support
@@ -11,9 +11,10 @@
#define _LIBCPP_THREADING_SUPPORT
#include <__availability>
+#include <__chrono/convert_to_timespec.h>
+#include <__chrono/duration.h>
#include <__config>
#include <__thread/poll_with_backoff.h>
-#include <chrono>
#include <errno.h>
#include <iosfwd>
#include <limits>
diff --git a/include/atomic b/include/atomic
index 4a5c484..dfa01bf 100644
--- a/include/atomic
+++ b/include/atomic
@@ -519,6 +519,7 @@
*/
#include <__availability>
+#include <__chrono/duration.h>
#include <__config>
#include <__thread/poll_with_backoff.h>
#include <__thread/timed_backoff_policy.h>
diff --git a/include/future b/include/future
index 15685df..fff746a 100644
--- a/include/future
+++ b/include/future
@@ -363,12 +363,13 @@
#include <__assert>
#include <__availability>
+#include <__chrono/duration.h>
+#include <__chrono/time_point.h>
#include <__config>
#include <__memory/allocator_arg_t.h>
#include <__memory/uses_allocator.h>
#include <__utility/auto_cast.h>
#include <__utility/forward.h>
-#include <chrono>
#include <exception>
#include <memory>
#include <mutex>
@@ -376,6 +377,8 @@
#include <thread>
#include <version>
+#include <chrono> // TODO: Remove unused header
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
diff --git a/include/semaphore b/include/semaphore
index 753d50f..df7b0d9 100644
--- a/include/semaphore
+++ b/include/semaphore
@@ -46,6 +46,7 @@
*/
#include <__availability>
+#include <__chrono/time_point.h>
#include <__config>
#include <__thread/timed_backoff_policy.h>
#include <__threading_support>
diff --git a/include/thread b/include/thread
index b059cfb..5a8e830 100644
--- a/include/thread
+++ b/include/thread
@@ -89,7 +89,6 @@
#include <__thread/timed_backoff_policy.h>
#include <__threading_support>
#include <__utility/forward.h>
-#include <chrono>
#include <cstddef>
#include <functional>
#include <iosfwd>
diff --git a/test/std/thread/futures/futures.async/async.pass.cpp b/test/std/thread/futures/futures.async/async.pass.cpp
index 5eded05..2fdafec 100644
--- a/test/std/thread/futures/futures.async/async.pass.cpp
+++ b/test/std/thread/futures/futures.async/async.pass.cpp
@@ -20,10 +20,11 @@
// async(launch policy, F&& f, Args&&... args);
-#include <future>
#include <atomic>
-#include <memory>
#include <cassert>
+#include <chrono>
+#include <future>
+#include <memory>
#include "test_macros.h"
diff --git a/test/std/thread/futures/futures.shared_future/wait.pass.cpp b/test/std/thread/futures/futures.shared_future/wait.pass.cpp
index 4be8c1b..26a5f1f 100644
--- a/test/std/thread/futures/futures.shared_future/wait.pass.cpp
+++ b/test/std/thread/futures/futures.shared_future/wait.pass.cpp
@@ -15,8 +15,9 @@
// void wait() const;
-#include <future>
#include <cassert>
+#include <chrono>
+#include <future>
#include "make_test_thread.h"
#include "test_macros.h"
diff --git a/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp b/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
index d8b0ce3..44b88f3 100644
--- a/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
+++ b/test/std/thread/futures/futures.shared_future/wait_for.pass.cpp
@@ -17,8 +17,9 @@
// future_status
// wait_for(const chrono::duration<Rep, Period>& rel_time) const;
-#include <future>
#include <cassert>
+#include <chrono>
+#include <future>
#include "make_test_thread.h"
#include "test_macros.h"
diff --git a/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp b/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
index 1d58dc2..fc356dc 100644
--- a/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
+++ b/test/std/thread/futures/futures.shared_future/wait_until.pass.cpp
@@ -17,9 +17,10 @@
// future_status
// wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;
-#include <future>
#include <atomic>
#include <cassert>
+#include <chrono>
+#include <future>
#include "make_test_thread.h"
#include "test_macros.h"
diff --git a/test/std/thread/futures/futures.unique_future/wait.pass.cpp b/test/std/thread/futures/futures.unique_future/wait.pass.cpp
index 712ee3b..2b9b0f6 100644
--- a/test/std/thread/futures/futures.unique_future/wait.pass.cpp
+++ b/test/std/thread/futures/futures.unique_future/wait.pass.cpp
@@ -15,8 +15,9 @@
// void wait() const;
-#include <future>
#include <cassert>
+#include <chrono>
+#include <future>
#include "make_test_thread.h"
#include "test_macros.h"
diff --git a/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp b/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
index ff5d979..3f41bc1 100644
--- a/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
+++ b/test/std/thread/futures/futures.unique_future/wait_for.pass.cpp
@@ -19,8 +19,9 @@
// future_status
// wait_for(const chrono::duration<Rep, Period>& rel_time) const;
-#include <future>
#include <cassert>
+#include <chrono>
+#include <future>
#include "make_test_thread.h"
#include "test_macros.h"
diff --git a/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp b/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
index e5171e5..d4e27d9 100644
--- a/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
+++ b/test/std/thread/futures/futures.unique_future/wait_until.pass.cpp
@@ -17,9 +17,10 @@
// future_status
// wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;
-#include <future>
#include <atomic>
#include <cassert>
+#include <chrono>
+#include <future>
#include "make_test_thread.h"
#include "test_macros.h"