Author: Chuanqi Xu
Date: 2026-08-10T07:26:59Z
New Revision: 54d02da71ecee5569e515a43dc9e5429917078f6

URL: 
https://github.com/llvm/llvm-project/commit/54d02da71ecee5569e515a43dc9e5429917078f6
DIFF: 
https://github.com/llvm/llvm-project/commit/54d02da71ecee5569e515a43dc9e5429917078f6.diff

LOG: [C++20] [Modules] Don't set clang module as named module for module 
duplication check (#215184)

Close https://github.com/llvm/llvm-project/issues/204632

Note that the error message is already diagnosed. So we don't need to do
additional thing here.

Added: 
    clang/test/Modules/GH204632.cppm

Modified: 
    clang/lib/Sema/SemaModule.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp
index caa61a99a6914..667f36ab737ed 100644
--- a/clang/lib/Sema/SemaModule.cpp
+++ b/clang/lib/Sema/SemaModule.cpp
@@ -389,6 +389,11 @@ Sema::ActOnModuleDecl(SourceLocation StartLoc, 
SourceLocation ModuleLoc,
       else if (const ModuleFileName *FileName = M->getASTFileName())
         Diag(M->DefinitionLoc, diag::note_prev_module_definition_from_ast_file)
             << *FileName;
+      // A Clang module or a header unit cannot be used as the current named
+      // module while recovering from it. See clang/test/Modules/GH204632.cppm
+      // for an example.
+      if (!M->isNamedModule())
+        return nullptr;
       Mod = M;
       break;
     }

diff  --git a/clang/test/Modules/GH204632.cppm 
b/clang/test/Modules/GH204632.cppm
new file mode 100644
index 0000000000000..13667fa35e479
--- /dev/null
+++ b/clang/test/Modules/GH204632.cppm
@@ -0,0 +1,14 @@
+// RUN: rm -rf %t
+// RUN: split-file %s %t
+// RUN: not %clang_cc1 -std=c++20 -fsyntax-only -fmodules \
+// RUN:   -fmodule-map-file=%t/module.modulemap %t/main.cpp 2>&1 | FileCheck %s
+
+// CHECK: main.cpp:1:15: error: redefinition of module 'M'
+// CHECK: module.modulemap:1:8: note: previously defined here
+// CHECK: 1 error generated.
+
+//--- module.modulemap
+module M {}
+
+//--- main.cpp
+export module M;


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to