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

Reply via email to