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
