Skip to content

Conversation

@atetubou
Copy link
Contributor

This fixes many build errors due to missing includes when I use libcxx_enable_explicit_modules which will be introduced in #126017.

@atetubou atetubou requested a review from a team as a code owner February 10, 2025 07:08
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Feb 10, 2025
@llvmbot
Copy link
Member

llvmbot commented Feb 10, 2025

@llvm/pr-subscribers-libcxx

Author: Takuto Ikuta (atetubou)

Changes

This fixes many build errors due to missing includes when I use libcxx_enable_explicit_modules which will be introduced in #126017.


Full diff: https://github.com/llvm/llvm-project/pull/126474.diff

18 Files Affected:

  • (modified) libcxx/include/__filesystem/path.h (+1)
  • (modified) libcxx/include/__vector/vector_bool.h (+1)
  • (modified) libcxx/src/condition_variable.cpp (+4)
  • (modified) libcxx/src/experimental/time_zone.cpp (+3)
  • (modified) libcxx/src/filesystem/directory_iterator.cpp (+1)
  • (modified) libcxx/src/filesystem/error.h (+2)
  • (modified) libcxx/src/filesystem/filesystem_clock.cpp (+2)
  • (modified) libcxx/src/filesystem/filesystem_error.cpp (+1)
  • (modified) libcxx/src/include/ryu/common.h (+1)
  • (modified) libcxx/src/memory.cpp (+2)
  • (modified) libcxx/src/memory_resource.cpp (+1)
  • (modified) libcxx/src/mutex.cpp (+1)
  • (modified) libcxx/src/random.cpp (+1)
  • (modified) libcxx/src/ryu/d2fixed.cpp (+1)
  • (modified) libcxx/src/ryu/d2s.cpp (+1)
  • (modified) libcxx/src/ryu/f2s.cpp (+1)
  • (modified) libcxx/src/thread.cpp (+2)
  • (modified) libcxx/src/vector.cpp (+1)
diff --git a/libcxx/include/__filesystem/path.h b/libcxx/include/__filesystem/path.h
index 0a751ba32954fd6..698ae209ae1f8ac 100644
--- a/libcxx/include/__filesystem/path.h
+++ b/libcxx/include/__filesystem/path.h
@@ -18,6 +18,7 @@
 #include <__iterator/back_insert_iterator.h>
 #include <__iterator/iterator_traits.h>
 #include <__type_traits/decay.h>
+#include <__type_traits/enable_if.h>
 #include <__type_traits/is_pointer.h>
 #include <__type_traits/remove_const.h>
 #include <__type_traits/remove_pointer.h>
diff --git a/libcxx/include/__vector/vector_bool.h b/libcxx/include/__vector/vector_bool.h
index 35f0f745e201c3a..714c86ae2bb96a0 100644
--- a/libcxx/include/__vector/vector_bool.h
+++ b/libcxx/include/__vector/vector_bool.h
@@ -18,6 +18,7 @@
 #include <__bit_reference>
 #include <__config>
 #include <__functional/unary_function.h>
+#include <__fwd/bit_reference.h>
 #include <__fwd/functional.h>
 #include <__fwd/vector.h>
 #include <__iterator/distance.h>
diff --git a/libcxx/src/condition_variable.cpp b/libcxx/src/condition_variable.cpp
index db60571cf5f5601..42385782e7a2f2d 100644
--- a/libcxx/src/condition_variable.cpp
+++ b/libcxx/src/condition_variable.cpp
@@ -6,7 +6,11 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <chrono>
 #include <condition_variable>
+#include <limits>
+#include <ratio>
+#include <system_error>
 #include <thread>
 
 #if defined(__ELF__) && defined(_LIBCPP_LINK_PTHREAD_LIB)
diff --git a/libcxx/src/experimental/time_zone.cpp b/libcxx/src/experimental/time_zone.cpp
index 289164ab1203642..28fd7a365a7b0bc 100644
--- a/libcxx/src/experimental/time_zone.cpp
+++ b/libcxx/src/experimental/time_zone.cpp
@@ -33,8 +33,11 @@
 #include <cctype>
 #include <chrono>
 #include <expected>
+#include <format>
+#include <functional>
 #include <map>
 #include <numeric>
+#include <optional>
 #include <ranges>
 
 #include "include/tzdb/time_zone_private.h"
diff --git a/libcxx/src/filesystem/directory_iterator.cpp b/libcxx/src/filesystem/directory_iterator.cpp
index 7e8e40d17f7a0de..a3ceedac102b970 100644
--- a/libcxx/src/filesystem/directory_iterator.cpp
+++ b/libcxx/src/filesystem/directory_iterator.cpp
@@ -10,6 +10,7 @@
 #include <__config>
 #include <errno.h>
 #include <filesystem>
+#include <memory>
 #include <stack>
 #include <utility>
 
diff --git a/libcxx/src/filesystem/error.h b/libcxx/src/filesystem/error.h
index c0213910b3780a5..7b3f56bdcd1c6e3 100644
--- a/libcxx/src/filesystem/error.h
+++ b/libcxx/src/filesystem/error.h
@@ -11,7 +11,9 @@
 
 #include <__assert>
 #include <__config>
+#include <algorithm>
 #include <cerrno>
+#include <chrono>
 #include <cstdarg>
 #include <cstddef>
 #include <cstdint>
diff --git a/libcxx/src/filesystem/filesystem_clock.cpp b/libcxx/src/filesystem/filesystem_clock.cpp
index e1f887072201876..2335d048b3139ee 100644
--- a/libcxx/src/filesystem/filesystem_clock.cpp
+++ b/libcxx/src/filesystem/filesystem_clock.cpp
@@ -10,6 +10,8 @@
 #include <__system_error/throw_system_error.h>
 #include <chrono>
 #include <filesystem>
+#include <ratio>
+#include <errno.h>
 #include <time.h>
 
 #if defined(_LIBCPP_WIN32API)
diff --git a/libcxx/src/filesystem/filesystem_error.cpp b/libcxx/src/filesystem/filesystem_error.cpp
index 456b902c331541c..4edd2a477057535 100644
--- a/libcxx/src/filesystem/filesystem_error.cpp
+++ b/libcxx/src/filesystem/filesystem_error.cpp
@@ -9,6 +9,7 @@
 #include <__config>
 #include <__utility/unreachable.h>
 #include <filesystem>
+#include <memory>
 #include <system_error>
 
 #include "format_string.h"
diff --git a/libcxx/src/include/ryu/common.h b/libcxx/src/include/ryu/common.h
index d5168d8710bf269..591ec414f850d06 100644
--- a/libcxx/src/include/ryu/common.h
+++ b/libcxx/src/include/ryu/common.h
@@ -44,6 +44,7 @@
 
 #include <__assert>
 #include <__config>
+#include <cstdint>
 #include <cstring>
 
 _LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/src/memory.cpp b/libcxx/src/memory.cpp
index 16190c242c1487e..68df61f96c9bec5 100644
--- a/libcxx/src/memory.cpp
+++ b/libcxx/src/memory.cpp
@@ -11,7 +11,9 @@
 #  define _LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS
 #endif
 
+#include <functional>
 #include <memory>
+#include <typeinfo>
 
 #if _LIBCPP_HAS_THREADS
 #  include <mutex>
diff --git a/libcxx/src/memory_resource.cpp b/libcxx/src/memory_resource.cpp
index ec9565f731bfac6..2c7d9aef6dc3f43 100644
--- a/libcxx/src/memory_resource.cpp
+++ b/libcxx/src/memory_resource.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include <cstddef>
+#include <cstdint>
 #include <memory>
 #include <memory_resource>
 
diff --git a/libcxx/src/mutex.cpp b/libcxx/src/mutex.cpp
index 2f8504d602dc9f4..54da662b7a4cc53 100644
--- a/libcxx/src/mutex.cpp
+++ b/libcxx/src/mutex.cpp
@@ -11,6 +11,7 @@
 #include <__utility/exception_guard.h>
 #include <limits>
 #include <mutex>
+#include <system_error>
 
 #include "include/atomic_support.h"
 
diff --git a/libcxx/src/random.cpp b/libcxx/src/random.cpp
index 3830e3918d2ee47..dddad84f027ef8c 100644
--- a/libcxx/src/random.cpp
+++ b/libcxx/src/random.cpp
@@ -16,6 +16,7 @@
 #include <__system_error/throw_system_error.h>
 #include <limits>
 #include <random>
+#include <string>
 
 #include <errno.h>
 #include <stdio.h>
diff --git a/libcxx/src/ryu/d2fixed.cpp b/libcxx/src/ryu/d2fixed.cpp
index 4cfc39535988e29..abfa340830b1bbd 100644
--- a/libcxx/src/ryu/d2fixed.cpp
+++ b/libcxx/src/ryu/d2fixed.cpp
@@ -42,6 +42,7 @@
 #include <__assert>
 #include <__config>
 #include <charconv>
+#include <cstddef>
 #include <cstring>
 
 #include "include/ryu/common.h"
diff --git a/libcxx/src/ryu/d2s.cpp b/libcxx/src/ryu/d2s.cpp
index 5b80ed8a709d8e6..c0d11107f880b1d 100644
--- a/libcxx/src/ryu/d2s.cpp
+++ b/libcxx/src/ryu/d2s.cpp
@@ -42,6 +42,7 @@
 #include <__assert>
 #include <__config>
 #include <charconv>
+#include <cstddef>
 
 #include "include/ryu/common.h"
 #include "include/ryu/d2fixed.h"
diff --git a/libcxx/src/ryu/f2s.cpp b/libcxx/src/ryu/f2s.cpp
index f42fbd68c91d2d4..116294e44841c6e 100644
--- a/libcxx/src/ryu/f2s.cpp
+++ b/libcxx/src/ryu/f2s.cpp
@@ -42,6 +42,7 @@
 #include <__assert>
 #include <__config>
 #include <charconv>
+#include <cstddef>
 
 #include "include/ryu/common.h"
 #include "include/ryu/d2fixed.h"
diff --git a/libcxx/src/thread.cpp b/libcxx/src/thread.cpp
index 73f22f12d8ccd29..d9e229f834e630d 100644
--- a/libcxx/src/thread.cpp
+++ b/libcxx/src/thread.cpp
@@ -6,12 +6,14 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <__system_error/throw_system_error.h>
 #include <__thread/poll_with_backoff.h>
 #include <__thread/timed_backoff_policy.h>
 #include <exception>
 #include <future>
 #include <limits>
 #include <thread>
+#include <utility>
 #include <vector>
 
 #if __has_include(<unistd.h>)
diff --git a/libcxx/src/vector.cpp b/libcxx/src/vector.cpp
index 3f3a906d6421f0a..60bf6fbe8d691f8 100644
--- a/libcxx/src/vector.cpp
+++ b/libcxx/src/vector.cpp
@@ -6,6 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <stdexcept>
 #include <vector>
 
 _LIBCPP_BEGIN_NAMESPACE_STD

@github-actions
Copy link

github-actions bot commented Feb 10, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

47c3f3d3f522e60bc494b70ffd7ea7a2046e8238
git squash commit for fix_modules_build.

5e565c1b781f1200f2ca5489c7a8fd2b176b15ed
fix include

fb8ee3631b5269f3c5001514ea678b0900bd3c47
memory

dad1a4c4ea904c0f6cff31574788c0957bc4c74a
fix module build

33d9547f63167a6f7e2f6e78fd6d7a7ef83c8bc2
hoge

f7d1acf79b29663c52c351319eb977ec08ca6b11
hoge
Copy link
Contributor

@philnik777 philnik777 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand what you're trying to do here. src/ can't be built with modules AFAIK. How do you work around the ODR violations?

@atetubou
Copy link
Contributor Author

Hmm, I should take a look at why this doesn't cause ODR violation. By the way, libc++ currently doesn't have a plan to build itself with Clang modules?

@atetubou atetubou marked this pull request as draft February 12, 2025 07:03
@philnik777
Copy link
Contributor

Hmm, I should take a look at why this doesn't cause ODR violation. By the way, libc++ currently doesn't have a plan to build itself with Clang modules?

No. Since we have ODR violations to keep ABI stability in a few cases I don't think it's feasible. It's also not like we'd gain that much, since the libc++ src/ is quite small.

@ldionne
Copy link
Member

ldionne commented Feb 17, 2025

Although we might not be able to build libc++ with Clang modules, this patch in itself is simply adding missing includes to our src/ files. And those changes can be verified correct by inspection (I just looked at a few of them and they look like truly missing includes). So I think we should move forward with the patch, just maybe not with the follow-up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants