[clang] [clang][Modules] Permit Link Declarations in Submodule Declarations in Module Maps (PR #156377)
Qiongsi Wu via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 1 18:47:04 PDT 2025
https://github.com/qiongsiwu updated https://github.com/llvm/llvm-project/pull/156377
>From 0cb749e2ec11cf51d2c97e935727e55aeaf65097 Mon Sep 17 00:00:00 2001
From: Qiongsi Wu <qiongsi_wu at apple.com>
Date: Mon, 1 Sep 2025 16:09:21 -0700
Subject: [PATCH] Permit link decls in submodule declarations.
---
clang/include/clang/Basic/DiagnosticLexKinds.td | 6 ++++--
clang/lib/Lex/ModuleMapFile.cpp | 6 +-----
clang/test/ClangScanDeps/link-libraries-diag-dup.c | 2 +-
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td
index c03c4033cd3a6..eec19e462b84f 100644
--- a/clang/include/clang/Basic/DiagnosticLexKinds.td
+++ b/clang/include/clang/Basic/DiagnosticLexKinds.td
@@ -915,8 +915,10 @@ def err_mmap_expected_attribute : Error<"expected an attribute name">;
def warn_mmap_link_redeclaration : Warning<"redeclaration of link library '%0'">,
InGroup<DiagGroup<"module-link-redeclaration">>, DefaultError;
def note_mmap_prev_link_declaration : Note<"previously declared here">;
-def err_mmap_submodule_link_decl
- : Error<"link declaration is not allowed in submodules">;
+def warn_mmap_submodule_link_decl
+ : Warning<"link declaration is not allowed in submodules">,
+ InGroup<DiagGroup<"module-submodule-link-decl">>,
+ DefaultError;
def warn_mmap_unknown_attribute : Warning<"unknown attribute '%0'">,
InGroup<IgnoredAttributes>;
def warn_mmap_mismatched_private_submodule : Warning<
diff --git a/clang/lib/Lex/ModuleMapFile.cpp b/clang/lib/Lex/ModuleMapFile.cpp
index f0cd9d2bee82a..7ceda7a0486d8 100644
--- a/clang/lib/Lex/ModuleMapFile.cpp
+++ b/clang/lib/Lex/ModuleMapFile.cpp
@@ -856,9 +856,7 @@ std::optional<LinkDecl> ModuleMapFileParser::parseLinkDecl(
// Make sure we eat all the tokens when we report the errors so parsing
// can continue.
if (!Allowed) {
- Diags.Report(LD.Location, diag::err_mmap_submodule_link_decl);
- HadError = true;
- return std::nullopt;
+ Diags.Report(LD.Location, diag::warn_mmap_submodule_link_decl);
}
auto [It, Inserted] =
@@ -866,8 +864,6 @@ std::optional<LinkDecl> ModuleMapFileParser::parseLinkDecl(
if (!Inserted) {
Diags.Report(LD.Location, diag::warn_mmap_link_redeclaration) << Library;
Diags.Report(It->second, diag::note_mmap_prev_link_declaration);
- HadError = true;
- return std::nullopt;
}
return std::move(LD);
diff --git a/clang/test/ClangScanDeps/link-libraries-diag-dup.c b/clang/test/ClangScanDeps/link-libraries-diag-dup.c
index e6612ca7bd216..ffb29bd15a1c8 100644
--- a/clang/test/ClangScanDeps/link-libraries-diag-dup.c
+++ b/clang/test/ClangScanDeps/link-libraries-diag-dup.c
@@ -51,7 +51,7 @@ module C {
// Note that module D does not report an error because it is explicit.
// Therefore we can use CHECK-NEXT for the redeclaration error on line 15.
-// CHECK: module.modulemap:6:5: error: link declaration is not allowed in submodules
+// CHECK: module.modulemap:6:5: error: link declaration is not allowed in submodules [-Wmodule-submodule-link-decl]
// CHECK-NEXT: module.modulemap:15:3: error: redeclaration of link library 'libraryA' [-Wmodule-link-redeclaration]
// CHECK-NEXT: module.modulemap:14:3: note: previously declared here
// CHECK-NOT: module.modulemap:20:3: error: redeclaration of link library 'libraryA'
More information about the cfe-commits
mailing list