Skip to content

Commit 6adf12f

Browse files
committed
[libc++][modules] Improves std.compat module.
Let the std.compat module use the std module instead of duplicating the exports. Based on @ChuanqiXu9's suggestion in #71438.
1 parent fb79f80 commit 6adf12f

File tree

5 files changed

+34
-148
lines changed

5 files changed

+34
-148
lines changed

libcxx/modules/std.compat.cppm.in

Lines changed: 2 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,17 @@ module;
1717

1818
// The headers of Table 24: C++ library headers [tab:headers.cpp]
1919
// and the headers of Table 25: C++ headers for C library facilities [tab:headers.cpp.c]
20-
#include <algorithm>
21-
#include <any>
22-
#include <array>
23-
#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
24-
# include <atomic>
25-
#endif
26-
#if !defined(_LIBCPP_HAS_NO_THREADS)
27-
# include <barrier>
28-
#endif
29-
#include <bit>
30-
#include <bitset>
3120
#include <cassert>
3221
#include <cctype>
3322
#include <cerrno>
3423
#include <cfenv>
3524
#include <cfloat>
36-
#include <charconv>
37-
#include <chrono>
3825
#include <cinttypes>
3926
#include <climits>
4027
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
4128
# include <clocale>
4229
#endif
4330
#include <cmath>
44-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
45-
# include <codecvt>
46-
#endif
47-
#include <compare>
48-
#include <complex>
49-
#include <concepts>
50-
#include <condition_variable>
51-
#include <coroutine>
5231
#include <csetjmp>
5332
#include <csignal>
5433
#include <cstdarg>
@@ -65,107 +44,6 @@ module;
6544
#if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)
6645
# include <cwctype>
6746
#endif
68-
#include <deque>
69-
#include <exception>
70-
#include <execution>
71-
#include <expected>
72-
#include <filesystem>
73-
#include <format>
74-
#include <forward_list>
75-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
76-
# include <fstream>
77-
#endif
78-
#include <functional>
79-
#if !defined(_LIBCPP_HAS_NO_THREADS)
80-
# include <future>
81-
#endif
82-
#include <initializer_list>
83-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
84-
# include <iomanip>
85-
#endif
86-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
87-
# include <ios>
88-
#endif
89-
#include <iosfwd>
90-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
91-
# include <iostream>
92-
#endif
93-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
94-
# include <istream>
95-
#endif
96-
#include <iterator>
97-
#if !defined(_LIBCPP_HAS_NO_THREADS)
98-
# include <latch>
99-
#endif
100-
#include <limits>
101-
#include <list>
102-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
103-
# include <locale>
104-
#endif
105-
#include <map>
106-
#include <mdspan>
107-
#include <memory>
108-
#include <memory_resource>
109-
#include <mutex>
110-
#include <new>
111-
#include <numbers>
112-
#include <numeric>
113-
#include <optional>
114-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
115-
# include <ostream>
116-
#endif
117-
#include <print>
118-
#include <queue>
119-
#include <random>
120-
#include <ranges>
121-
#include <ratio>
122-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
123-
# include <regex>
124-
#endif
125-
#include <scoped_allocator>
126-
#if !defined(_LIBCPP_HAS_NO_THREADS)
127-
# include <semaphore>
128-
#endif
129-
#include <set>
130-
#if !defined(_LIBCPP_HAS_NO_THREADS)
131-
# include <shared_mutex>
132-
#endif
133-
#include <source_location>
134-
#include <span>
135-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
136-
# include <sstream>
137-
#endif
138-
#include <stack>
139-
#include <stdexcept>
140-
#if !defined(_LIBCPP_HAS_NO_THREADS)
141-
# include <stop_token>
142-
#endif
143-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
144-
# include <streambuf>
145-
#endif
146-
#include <string>
147-
#include <string_view>
148-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
149-
# include <strstream>
150-
#endif
151-
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
152-
# include <syncstream>
153-
#endif
154-
#include <system_error>
155-
#if !defined(_LIBCPP_HAS_NO_THREADS)
156-
# include <thread>
157-
#endif
158-
#include <tuple>
159-
#include <type_traits>
160-
#include <typeindex>
161-
#include <typeinfo>
162-
#include <unordered_map>
163-
#include <unordered_set>
164-
#include <utility>
165-
#include <valarray>
166-
#include <variant>
167-
#include <vector>
168-
#include <version>
16947

17048
// *** Headers not yet available ***
17149
#if __has_include(<debugging>)
@@ -203,6 +81,7 @@ module;
20381
#endif // __has_include(<text_encoding>)
20482

20583
export module std.compat;
84+
export import std;
85+
20686

207-
@LIBCXX_MODULE_STD_INCLUDE_SOURCES@
20887
@LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES@

libcxx/modules/std.cppm.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,5 @@ module;
204204

205205
export module std;
206206

207+
207208
@LIBCXX_MODULE_STD_INCLUDE_SOURCES@

libcxx/test/libcxx/module_std_compat.gen.py

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import sys
2222

2323
sys.path.append(sys.argv[1])
24+
from libcxx.header_information import module_c_headers
2425
from libcxx.test.modules import module_test_generator
2526

2627
generator = module_test_generator(
@@ -37,27 +38,5 @@
3738
print("//--- module_std_compat.sh.cpp")
3839
generator.write_test(
3940
"std.compat",
40-
[
41-
"cassert",
42-
"cctype",
43-
"cerrno",
44-
"cfenv",
45-
"cfloat",
46-
"cinttypes",
47-
"climits",
48-
"clocale",
49-
"cmath",
50-
"csetjmp",
51-
"csignal",
52-
"cstdarg",
53-
"cstddef",
54-
"cstdint",
55-
"cstdio",
56-
"cstdlib",
57-
"cstring",
58-
"ctime",
59-
"cuchar",
60-
"cwchar",
61-
"cwctype",
62-
],
41+
module_c_headers,
6342
)

libcxx/utils/generate_libcxx_cppm_in.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import os.path
1010
import sys
1111

12+
from libcxx.header_information import module_c_headers
1213
from libcxx.header_information import module_headers
1314
from libcxx.header_information import header_restrictions
1415
from libcxx.header_information import headers_not_available
@@ -44,7 +45,7 @@ def write_file(module):
4445
// and the headers of Table 25: C++ headers for C library facilities [tab:headers.cpp.c]
4546
"""
4647
)
47-
for header in module_headers:
48+
for header in module_headers if module == "std" else module_c_headers:
4849
if header in header_restrictions:
4950
module_cpp_in.write(
5051
f"""\
@@ -69,8 +70,9 @@ def write_file(module):
6970
module_cpp_in.write(
7071
f"""
7172
export module {module};
73+
{'export import std;' if module == 'std.compat' else ''}
7274
73-
@LIBCXX_MODULE_STD_INCLUDE_SOURCES@
75+
{'@LIBCXX_MODULE_STD_INCLUDE_SOURCES@' if module == 'std' else ''}
7476
{'@LIBCXX_MODULE_STD_COMPAT_INCLUDE_SOURCES@' if module == 'std.compat' else ''}"""
7577
)
7678

libcxx/utils/libcxx/header_information.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,28 @@ def is_modulemap_header(header):
212212
# These headers have been removed in C++20 so are never part of a module.
213213
and not header in ["ccomplex", "ciso646", "cstdbool", "ctgmath"]
214214
]
215+
216+
# The C headers used in the std and std.compat modules.
217+
module_c_headers = [
218+
"cassert",
219+
"cctype",
220+
"cerrno",
221+
"cfenv",
222+
"cfloat",
223+
"cinttypes",
224+
"climits",
225+
"clocale",
226+
"cmath",
227+
"csetjmp",
228+
"csignal",
229+
"cstdarg",
230+
"cstddef",
231+
"cstdint",
232+
"cstdio",
233+
"cstdlib",
234+
"cstring",
235+
"ctime",
236+
"cuchar",
237+
"cwchar",
238+
"cwctype",
239+
]

0 commit comments

Comments
 (0)