Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libc++] Avoid including <ostream> in <fstream> and <strstream> #116014

Merged
merged 1 commit into from
Nov 16, 2024

Conversation

philnik777
Copy link
Contributor

This reduces the include time of <fstream> from ~800ms to ~500ms.

@philnik777 philnik777 marked this pull request as ready for review November 16, 2024 17:19
@philnik777 philnik777 requested a review from a team as a code owner November 16, 2024 17:19
@philnik777 philnik777 merged commit 1636580 into llvm:main Nov 16, 2024
62 checks passed
@philnik777 philnik777 deleted the avoid_ostream_include branch November 16, 2024 17:19
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Nov 16, 2024
@llvmbot
Copy link

llvmbot commented Nov 16, 2024

@llvm/pr-subscribers-libcxx

Author: Nikolas Klauser (philnik777)

Changes

This reduces the include time of &lt;fstream&gt; from ~800ms to ~500ms.


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

5 Files Affected:

  • (modified) libcxx/include/fstream (+3-1)
  • (modified) libcxx/include/strstream (+2-1)
  • (modified) libcxx/test/libcxx/transitive_includes/cxx23.csv (-12)
  • (modified) libcxx/test/libcxx/transitive_includes/cxx26.csv (-12)
  • (modified) libcxx/test/std/input.output/file.streams/fstreams/native_handle_test_helpers.h (+1)
diff --git a/libcxx/include/fstream b/libcxx/include/fstream
index e3b9abbbdcf056..e188bfc9042a7c 100644
--- a/libcxx/include/fstream
+++ b/libcxx/include/fstream
@@ -193,6 +193,8 @@ typedef basic_fstream<wchar_t> wfstream;
 #include <__fwd/fstream.h>
 #include <__locale>
 #include <__memory/addressof.h>
+#include <__memory/unique_ptr.h>
+#include <__ostream/basic_ostream.h>
 #include <__type_traits/enable_if.h>
 #include <__type_traits/is_same.h>
 #include <__utility/move.h>
@@ -200,7 +202,7 @@ typedef basic_fstream<wchar_t> wfstream;
 #include <__utility/unreachable.h>
 #include <cstdio>
 #include <istream>
-#include <ostream>
+#include <streambuf>
 #include <typeinfo>
 #include <version>
 
diff --git a/libcxx/include/strstream b/libcxx/include/strstream
index 9ff4024a7c7e21..b263fe1a76ad22 100644
--- a/libcxx/include/strstream
+++ b/libcxx/include/strstream
@@ -130,8 +130,9 @@ private:
 */
 
 #include <__config>
+#include <__ostream/basic_ostream.h>
 #include <istream>
-#include <ostream>
+#include <streambuf>
 #include <version>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/test/libcxx/transitive_includes/cxx23.csv b/libcxx/test/libcxx/transitive_includes/cxx23.csv
index 854ad1b5df6f1e..c0cabf49f81a5d 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx23.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx23.csv
@@ -410,13 +410,11 @@ forward_list limits
 forward_list new
 forward_list tuple
 forward_list version
-fstream array
 fstream bitset
 fstream cctype
 fstream cerrno
 fstream climits
 fstream clocale
-fstream cmath
 fstream compare
 fstream cstddef
 fstream cstdint
@@ -427,7 +425,6 @@ fstream ctime
 fstream cwchar
 fstream cwctype
 fstream filesystem
-fstream format
 fstream initializer_list
 fstream iomanip
 fstream ios
@@ -436,9 +433,6 @@ fstream istream
 fstream limits
 fstream locale
 fstream new
-fstream optional
-fstream ostream
-fstream print
 fstream ratio
 fstream stdexcept
 fstream streambuf
@@ -1081,13 +1075,11 @@ string_view limits
 string_view new
 string_view stdexcept
 string_view version
-strstream array
 strstream bitset
 strstream cctype
 strstream cerrno
 strstream climits
 strstream clocale
-strstream cmath
 strstream compare
 strstream cstddef
 strstream cstdint
@@ -1097,7 +1089,6 @@ strstream cstring
 strstream ctime
 strstream cwchar
 strstream cwctype
-strstream format
 strstream initializer_list
 strstream ios
 strstream iosfwd
@@ -1105,9 +1096,6 @@ strstream istream
 strstream limits
 strstream locale
 strstream new
-strstream optional
-strstream ostream
-strstream print
 strstream ratio
 strstream stdexcept
 strstream streambuf
diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index ba2faaee5e3757..5bbf5b41047b5d 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -410,13 +410,11 @@ forward_list limits
 forward_list new
 forward_list tuple
 forward_list version
-fstream array
 fstream bitset
 fstream cctype
 fstream cerrno
 fstream climits
 fstream clocale
-fstream cmath
 fstream compare
 fstream cstddef
 fstream cstdint
@@ -426,7 +424,6 @@ fstream cstring
 fstream ctime
 fstream cwchar
 fstream cwctype
-fstream format
 fstream initializer_list
 fstream iomanip
 fstream ios
@@ -435,9 +432,6 @@ fstream istream
 fstream limits
 fstream locale
 fstream new
-fstream optional
-fstream ostream
-fstream print
 fstream ratio
 fstream stdexcept
 fstream streambuf
@@ -1080,13 +1074,11 @@ string_view limits
 string_view new
 string_view stdexcept
 string_view version
-strstream array
 strstream bitset
 strstream cctype
 strstream cerrno
 strstream climits
 strstream clocale
-strstream cmath
 strstream compare
 strstream cstddef
 strstream cstdint
@@ -1096,7 +1088,6 @@ strstream cstring
 strstream ctime
 strstream cwchar
 strstream cwctype
-strstream format
 strstream initializer_list
 strstream ios
 strstream iosfwd
@@ -1104,9 +1095,6 @@ strstream istream
 strstream limits
 strstream locale
 strstream new
-strstream optional
-strstream ostream
-strstream print
 strstream ratio
 strstream stdexcept
 strstream streambuf
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/native_handle_test_helpers.h b/libcxx/test/std/input.output/file.streams/fstreams/native_handle_test_helpers.h
index 4bc862d789848c..9cafec5bf72817 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/native_handle_test_helpers.h
+++ b/libcxx/test/std/input.output/file.streams/fstreams/native_handle_test_helpers.h
@@ -10,6 +10,7 @@
 #define TEST_STD_INPUT_OUTPUT_FILE_STREAMS_FSTREAMS_TEST_HELPERS_H
 
 #include <cassert>
+#include <cerrno>
 #include <concepts>
 #include <cstdio>
 #include <fstream>

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.

2 participants