[clang] DO NOT SUBMIT Run #177979 on buildbot (PR #178021)
Florian Mayer via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 28 15:54:25 PST 2026
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 <fmayer at google.com>
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 <fmayer at google.com>
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;
More information about the cfe-commits
mailing list