[clang] [clang][Modules] Complete the implementation of P2615: Meaningful exports (PR #194201)
Corentin Jabot via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 27 08:46:42 PDT 2026
================
@@ -440,6 +443,87 @@ Decl *Parser::ParseExportDeclaration() {
T.getCloseLocation());
}
+void Parser::CheckUnbracedLinkageOrExportDeclaration(
+ Decl *LinkageOrExportDecl) {
+ const auto *DC = cast<DeclContext>(LinkageOrExportDecl);
+ if (DC->decls_empty())
+ return;
+
+ const Decl *D = *DC->decls_begin();
+
+ // Nested export declarations are diagnosed elsewhere.
+ if (isa<LinkageSpecDecl>(LinkageOrExportDecl) && isa<ExportDecl>(D)) {
+ Diag(LinkageOrExportDecl->getLocation(),
+ diag::err_invalid_decl_in_linkage_spec)
+ << 2;
+ return;
+ }
+
+ // [module.interface]/1 says:
+ //
+ // The name-declaration of an export-declaration shall not declare a
+ // partial specialization.
+ //
+ // There's no equivalent wording for linkage-specification.
+ if (isa<ClassTemplatePartialSpecializationDecl,
+ VarTemplatePartialSpecializationDecl>(D) &&
+ isa<LinkageSpecDecl>(LinkageOrExportDecl))
+ return;
----------------
cor3ntin wrote:
It is weird that this case is not diagnosed
https://github.com/llvm/llvm-project/pull/194201
More information about the cfe-commits
mailing list