https://github.com/anondeveg updated 
https://github.com/llvm/llvm-project/pull/223757

>From 671d46104c174cc513f29a68da242eb5504653a5 Mon Sep 17 00:00:00 2001
From: Anondev <[email protected]>
Date: Tue, 15 Sep 2026 19:29:02 +0300
Subject: [PATCH] [clang][Modules] make ActOnPrivateModuleFragmentDecl return
 non-null object on success.

---
 clang/lib/Parse/Parser.cpp                          | 13 ++++++++-----
 clang/lib/Sema/SemaModule.cpp                       |  3 ++-
 .../test/Modules/mismatched_global_module_sate.cppm |  5 +++++
 3 files changed, 15 insertions(+), 6 deletions(-)
 create mode 100644 clang/test/Modules/mismatched_global_module_sate.cppm

diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index bad81ea92cd2d..b15180d2b217e 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -2360,12 +2360,15 @@ Parser::ParseModuleDecl(Sema::ModuleImportState 
&ImportState) {
     SourceLocation PrivateLoc = ConsumeToken();
     DiagnoseAndSkipCXX11Attributes();
     ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);
-    ImportState = ImportState == Sema::ModuleImportState::ImportAllowed
-                      ? Sema::ModuleImportState::PrivateFragmentImportAllowed
-                      : Sema::ModuleImportState::PrivateFragmentImportFinished;
-    return Actions.ActOnPrivateModuleFragmentDecl(ModuleLoc, PrivateLoc);
+    auto Result = Actions.ActOnPrivateModuleFragmentDecl(ModuleLoc, 
PrivateLoc);
+    if (Result) {
+      ImportState =
+          ImportState == Sema::ModuleImportState::ImportAllowed
+              ? Sema::ModuleImportState::PrivateFragmentImportAllowed
+              : Sema::ModuleImportState::PrivateFragmentImportFinished;
+    }
+    return nullptr;
   }
-
   SmallVector<IdentifierLoc, 2> Path;
   if (ParseModuleName(ModuleLoc, Path, /*IsImport*/ false))
     return nullptr;
diff --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp
index d7a182fe5654c..fd8c66699e670 100644
--- a/clang/lib/Sema/SemaModule.cpp
+++ b/clang/lib/Sema/SemaModule.cpp
@@ -566,7 +566,8 @@ Sema::ActOnPrivateModuleFragmentDecl(SourceLocation 
ModuleLoc,
   TU->setLocalOwningModule(PrivateModuleFragment);
 
   // FIXME: Consider creating an explicit representation of this declaration.
-  return nullptr;
+  // Returning TU as marker for it is correctly parsed.
+  return ConvertDeclToDeclGroup(TU);
 }
 
 DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc,
diff --git a/clang/test/Modules/mismatched_global_module_sate.cppm 
b/clang/test/Modules/mismatched_global_module_sate.cppm
new file mode 100644
index 0000000000000..417b8ad932afb
--- /dev/null
+++ b/clang/test/Modules/mismatched_global_module_sate.cppm
@@ -0,0 +1,5 @@
+// RUN: %clang_cc1 --std=c++23 -fsyntax-only -verify %s
+// see ISSUE 219950 
+module;
+module :private; // expected-error {{private module fragment declaration with 
no preceding module declaration}}
+export module Foo;

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

Reply via email to