https://github.com/fmayer updated https://github.com/llvm/llvm-project/pull/178021
>From 794a96a39c4a845510f38be6b9c01acd2b1dd51f Mon Sep 17 00:00:00 2001 From: Florian Mayer <[email protected]> Date: Mon, 26 Jan 2026 11:09:51 -0800 Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?= =?UTF-8?q?itial=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.6 --- clang/lib/Parse/ParsePragma.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Parse/ParsePragma.cpp b/clang/lib/Parse/ParsePragma.cpp index 54b96fd2102b5..3d7e7b5d8ac49 100644 --- a/clang/lib/Parse/ParsePragma.cpp +++ b/clang/lib/Parse/ParsePragma.cpp @@ -1412,7 +1412,7 @@ void Parser::zOSHandlePragmaHelper(tok::TokenKind PragmaKind) { auto *TheTokens = (std::pair<std::unique_ptr<Token[]>, size_t> *)Tok.getAnnotationValue(); PP.EnterTokenStream(std::move(TheTokens->first), TheTokens->second, true, - false); + /*IsReinject=*/true); ConsumeAnnotationToken(); llvm::scope_exit OnReturn([this]() { >From d0ba0f5550cbdb4f5f81cfb3abd9777df267cea0 Mon Sep 17 00:00:00 2001 From: Florian Mayer <[email protected]> Date: Mon, 26 Jan 2026 14:01:16 -0800 Subject: [PATCH 2/2] asd Created using spr 1.3.6 --- clang/include/clang/Basic/DiagnosticParseKinds.td | 2 -- clang/lib/Parse/ParsePragma.cpp | 5 +++-- clang/lib/Parse/ParseStmt.cpp | 6 ++---- clang/lib/Sema/SemaAttr.cpp | 5 +++++ 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td index 8d4c816bae0a5..457d3644de35a 100644 --- a/clang/include/clang/Basic/DiagnosticParseKinds.td +++ b/clang/include/clang/Basic/DiagnosticParseKinds.td @@ -1336,8 +1336,6 @@ def warn_pragma_init_seg_unsupported_target : Warning< def err_pragma_file_or_compound_scope : Error< "'#pragma %0' can only appear at file scope or at the start of a " "compound statement">; -def err_pragma_file_scope : Error< - "'#pragma %0' can only appear at file scope">; // - #pragma stdc unknown def ext_stdc_pragma_ignored : ExtWarn<"unknown pragma in STDC namespace">, InGroup<UnknownPragmas>; diff --git a/clang/lib/Parse/ParsePragma.cpp b/clang/lib/Parse/ParsePragma.cpp index 3d7e7b5d8ac49..def2817c930b2 100644 --- a/clang/lib/Parse/ParsePragma.cpp +++ b/clang/lib/Parse/ParsePragma.cpp @@ -1409,10 +1409,11 @@ void Parser::zOSHandlePragmaHelper(tok::TokenKind PragmaKind) { StringRef PragmaName = "export"; using namespace clang::charinfo; - auto *TheTokens = - (std::pair<std::unique_ptr<Token[]>, size_t> *)Tok.getAnnotationValue(); + auto *TheTokens = static_cast<std::pair<std::unique_ptr<Token[]>, size_t> *>( + Tok.getAnnotationValue()); PP.EnterTokenStream(std::move(TheTokens->first), TheTokens->second, true, /*IsReinject=*/true); + Tok.setAnnotationValue(nullptr); ConsumeAnnotationToken(); llvm::scope_exit OnReturn([this]() { diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 771db0a00091b..1a45ed66950be 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -506,8 +506,7 @@ StmtResult Parser::ParseStatementOrDeclarationAfterAttributes( case tok::annot_pragma_export: ProhibitAttributes(CXX11Attrs); ProhibitAttributes(GNUAttrs); - Diag(Tok, diag::err_pragma_file_scope) << "export"; - ConsumeAnnotationToken(); + HandlePragmaExport(); return StmtEmpty(); } @@ -1039,8 +1038,7 @@ void Parser::ParseCompoundStatementLeadingPragmas() { HandlePragmaDump(); break; case tok::annot_pragma_export: - Diag(Tok, diag::err_pragma_file_scope) << "export"; - ConsumeAnnotationToken(); + HandlePragmaExport(); break; default: checkForPragmas = false; diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp index 738daf2f69290..494cf68db8ee6 100644 --- a/clang/lib/Sema/SemaAttr.cpp +++ b/clang/lib/Sema/SemaAttr.cpp @@ -1346,6 +1346,11 @@ NamedDecl *Sema::lookupExternCFunctionOrVariable(IdentifierInfo *IdentId, void Sema::ActOnPragmaExport(IdentifierInfo *IdentId, SourceLocation NameLoc, Scope *curScope) { + if (!CurContext->getRedeclContext()->isFileContext()) { + Diag(NameLoc, diag::err_pragma_expected_file_scope) << "export"; + return; + } + PendingPragmaInfo Info; Info.NameLoc = NameLoc; Info.Used = false; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
