[libcxx-commits] [libcxx] [libc++] Suppress reserved module name warning for `module std` (PR #228632)
via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Oct 2 18:42:18 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Sharadh Rajaraman (sharadhr)
<details>
<summary>Changes</summary>
Suppress the Clang reserved module identifier warning for the standard library module declarations.\n\nAdds regression coverage that promotes the warning to an error while precompiling std and std.compat.\n\nTests: filtered libc++ Lit tests for std/modules/std.pass.cpp and std/modules/std.compat.pass.cpp (pass with the change; fail without it).
---
Full diff: https://github.com/llvm/llvm-project/pull/228632.diff
6 Files Affected:
- (modified) libcxx/modules/std.compat.cppm.in (+7)
- (modified) libcxx/modules/std.cppm.in (+7)
- (modified) libcxx/test/std/modules/std.compat.pass.cpp (+3)
- (modified) libcxx/test/std/modules/std.pass.cpp (+3)
- (modified) libcxx/utils/generate_libcxx_cppm_in.py (+13-1)
- (modified) libcxx/utils/libcxx/test/format.py (+2-2)
``````````diff
diff --git a/libcxx/modules/std.compat.cppm.in b/libcxx/modules/std.compat.cppm.in
index ab08125c4c4e45..e69c1509a781e4 100644
--- a/libcxx/modules/std.compat.cppm.in
+++ b/libcxx/modules/std.compat.cppm.in
@@ -77,7 +77,14 @@ module;
# endif // __has_include(<stdfloat>)
#endif // _WIN32
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-module-identifier"
+#endif
export module std.compat;
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic pop
+#endif
export import std;
diff --git a/libcxx/modules/std.cppm.in b/libcxx/modules/std.cppm.in
index b9a491653659af..2d2d1e655503f9 100644
--- a/libcxx/modules/std.cppm.in
+++ b/libcxx/modules/std.cppm.in
@@ -160,7 +160,14 @@ module;
# endif // __has_include(<stdfloat>)
#endif // _WIN32
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-module-identifier"
+#endif
export module std;
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic pop
+#endif
@LIBCXX_MODULE_STD_INCLUDE_SOURCES@
diff --git a/libcxx/test/std/modules/std.compat.pass.cpp b/libcxx/test/std/modules/std.compat.pass.cpp
index 0d1a4ac7d89c43..22a339f7c9dc81 100644
--- a/libcxx/test/std/modules/std.compat.pass.cpp
+++ b/libcxx/test/std/modules/std.compat.pass.cpp
@@ -16,6 +16,9 @@
// C++20 modules are incompatible with Clang modules
// ADDITIONAL_COMPILE_FLAGS: -fno-modules
+// Ensure the std.compat module declaration does not trigger a reserved-name warning.
+// ADDITIONAL_COMPILE_FLAGS: -Werror=reserved-module-identifier
+
// MODULE_DEPENDENCIES: std.compat
import std.compat;
diff --git a/libcxx/test/std/modules/std.pass.cpp b/libcxx/test/std/modules/std.pass.cpp
index 4587dcb1b81784..a6ab09b4c64974 100644
--- a/libcxx/test/std/modules/std.pass.cpp
+++ b/libcxx/test/std/modules/std.pass.cpp
@@ -16,6 +16,9 @@
// C++20 modules are incompatible with Clang modules
// ADDITIONAL_COMPILE_FLAGS: -fno-modules
+// Ensure the std module declaration does not trigger a reserved-name warning.
+// ADDITIONAL_COMPILE_FLAGS: -Werror=reserved-module-identifier
+
// MODULE_DEPENDENCIES: std
import std;
diff --git a/libcxx/utils/generate_libcxx_cppm_in.py b/libcxx/utils/generate_libcxx_cppm_in.py
index fac33f74812a7f..acb3f28a2020ac 100644
--- a/libcxx/utils/generate_libcxx_cppm_in.py
+++ b/libcxx/utils/generate_libcxx_cppm_in.py
@@ -69,10 +69,22 @@ def write_file(module):
"""
)
+ module_declaration = f"export module {module};"
+ if module in ("std", "std.compat"):
+ module_declaration = f"""\
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-module-identifier"
+#endif
+{module_declaration}
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic pop
+#endif"""
+
module_cpp_in.write(
f"""#endif // _WIN32
-export module {module};
+{module_declaration}
{'export import std;' if module == 'std.compat' else ''}
{'@LIBCXX_MODULE_STD_INCLUDE_SOURCES@' if module == 'std' else ''}
diff --git a/libcxx/utils/libcxx/test/format.py b/libcxx/utils/libcxx/test/format.py
index 3e24e435e7c07b..7f830d7598bcc2 100644
--- a/libcxx/utils/libcxx/test/format.py
+++ b/libcxx/utils/libcxx/test/format.py
@@ -177,7 +177,7 @@ def parseScript(test, preamble):
0,
"%dbg(MODULE std.compat) %{cxx} %{flags} "
f"{compileFlags} "
- "-Wno-reserved-module-identifier -Wno-reserved-user-defined-literal "
+ "-Wno-reserved-user-defined-literal "
"-fmodule-file=std=%{temp}/std.pcm " # The std.compat module imports std.
"--precompile -o %{temp}/std.compat.pcm -c %{module-dir}/std.compat.cppm",
)
@@ -194,7 +194,7 @@ def parseScript(test, preamble):
0,
"%dbg(MODULE std) %{cxx} %{flags} "
f"{compileFlags} "
- "-Wno-reserved-module-identifier -Wno-reserved-user-defined-literal "
+ "-Wno-reserved-user-defined-literal "
"--precompile -o %{temp}/std.pcm -c %{module-dir}/std.cppm",
)
moduleCompileFlags.extend(["-fmodule-file=std=%{temp}/std.pcm", "%{temp}/std.pcm"])
``````````
</details>
https://github.com/llvm/llvm-project/pull/228632
More information about the libcxx-commits
mailing list