[libcxx-commits] [libcxx] [libc++] Suppress reserved module name warning (PR #228632)

Sharadh Rajaraman via libcxx-commits libcxx-commits at lists.llvm.org
Fri Oct 2 18:41:34 PDT 2026


https://github.com/sharadhr created https://github.com/llvm/llvm-project/pull/228632

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).

>From cd40afe0baed6c459696fc0b3e8b57de9a40d22d Mon Sep 17 00:00:00 2001
From: Sharadh Rajaraman <r.sharadh at outlook.sg>
Date: Sat, 3 Oct 2026 02:40:13 +0100
Subject: [PATCH 1/2] [libc++][test] Test reserved module name warning

Co-authored-by: Copilot <223556219+Copilot at users.noreply.github.com>
---
 libcxx/test/std/modules/std.compat.pass.cpp | 3 +++
 libcxx/test/std/modules/std.pass.cpp        | 3 +++
 libcxx/utils/libcxx/test/format.py          | 4 ++--
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/modules/std.compat.pass.cpp b/libcxx/test/std/modules/std.compat.pass.cpp
index 0d1a4ac7d89c435..22a339f7c9dc81e 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 4587dcb1b817841..a6ab09b4c64974a 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/libcxx/test/format.py b/libcxx/utils/libcxx/test/format.py
index 3e24e435e7c07b2..7f830d7598bcc2c 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"])

>From 8081eb44c2f21f88111ab425069de0f465d3568f Mon Sep 17 00:00:00 2001
From: Sharadh Rajaraman <r.sharadh at outlook.sg>
Date: Sat, 3 Oct 2026 02:40:14 +0100
Subject: [PATCH 2/2] [libc++] Suppress reserved module name warning

Co-authored-by: Copilot <223556219+Copilot at users.noreply.github.com>
---
 libcxx/modules/std.compat.cppm.in       |  7 +++++++
 libcxx/modules/std.cppm.in              |  7 +++++++
 libcxx/utils/generate_libcxx_cppm_in.py | 14 +++++++++++++-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/libcxx/modules/std.compat.cppm.in b/libcxx/modules/std.compat.cppm.in
index ab08125c4c4e451..e69c1509a781e45 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 b9a491653659af5..2d2d1e655503f91 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/utils/generate_libcxx_cppm_in.py b/libcxx/utils/generate_libcxx_cppm_in.py
index fac33f74812a7fe..acb3f28a2020acf 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 ''}



More information about the libcxx-commits mailing list