https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/180202
Backport e0d922ee20e1948b2a1a2aa9689ceb14796d2a91 Requested by: @kparzysz >From 5d10737ea3ba819012bf79e11491bd76ee0f8045 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek <[email protected]> Date: Tue, 3 Feb 2026 09:01:29 -0600 Subject: [PATCH] [flang][OpenMP] Add source range to construct scopes (#179259) Make sure to add the source range whenever we create a scope for an OpenMP construct or a clause. This allows that scope to be located via context.FindScope(source). (cherry picked from commit e0d922ee20e1948b2a1a2aa9689ceb14796d2a91) --- .../lib/Lower/OpenMP/DataSharingProcessor.cpp | 3 +-- flang/lib/Semantics/resolve-names.cpp | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/flang/lib/Lower/OpenMP/DataSharingProcessor.cpp b/flang/lib/Lower/OpenMP/DataSharingProcessor.cpp index 83c2eda0a2dc7..a958ec9ba503c 100644 --- a/flang/lib/Lower/OpenMP/DataSharingProcessor.cpp +++ b/flang/lib/Lower/OpenMP/DataSharingProcessor.cpp @@ -479,8 +479,7 @@ void DataSharingProcessor::collectSymbols( for (const semantics::Scope &child : scope->children()) collectScopes(&child); }; - parser::CharBlock source = - clauses.empty() ? getSource(semaCtx, eval) : clauses.front().source; + parser::CharBlock source = getSource(semaCtx, eval); const semantics::Scope *curScope = nullptr; if (!source.empty()) { curScope = &semaCtx.FindScope(source); diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index d2a3331710dba..a547e8ae40ed4 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -1567,6 +1567,8 @@ void AccVisitor::Post(const parser::OpenACCCombinedConstruct &x) { PopScope(); } class OmpVisitor : public virtual DeclarationVisitor { public: void AddOmpSourceRange(const parser::CharBlock &); + void PushScopeWithSource( + Scope::Kind kind, parser::CharBlock source, Symbol *symbol = nullptr); static bool NeedsScope(const parser::OmpBlockConstruct &); static bool NeedsScope(const parser::OmpClause &); @@ -1590,8 +1592,8 @@ class OmpVisitor : public virtual DeclarationVisitor { Post(static_cast<const parser::OmpDirectiveSpecification &>(x)); } - bool Pre(const parser::OpenMPLoopConstruct &) { - PushScope(Scope::Kind::OtherConstruct, nullptr); + bool Pre(const parser::OpenMPLoopConstruct &x) { + PushScopeWithSource(Scope::Kind::OtherConstruct, x.source); return true; } void Post(const parser::OpenMPLoopConstruct &) { PopScope(); } @@ -1635,8 +1637,8 @@ class OmpVisitor : public virtual DeclarationVisitor { } bool Pre(const parser::OmpMapClause &); - bool Pre(const parser::OpenMPSectionsConstruct &) { - PushScope(Scope::Kind::OtherConstruct, nullptr); + bool Pre(const parser::OpenMPSectionsConstruct &x) { + PushScopeWithSource(Scope::Kind::OtherConstruct, x.source); return true; } void Post(const parser::OpenMPSectionsConstruct &) { PopScope(); } @@ -1742,7 +1744,7 @@ class OmpVisitor : public virtual DeclarationVisitor { } bool Pre(const parser::OmpClause &x) { if (NeedsScope(x)) { - PushScope(Scope::Kind::OtherClause, nullptr); + PushScopeWithSource(Scope::Kind::OtherClause, x.source); } return true; } @@ -1811,9 +1813,15 @@ void OmpVisitor::AddOmpSourceRange(const parser::CharBlock &source) { currScope().AddSourceRange(source); } +void OmpVisitor::PushScopeWithSource( + Scope::Kind kind, parser::CharBlock source, Symbol *symbol) { + PushScope(kind, symbol); + currScope().AddSourceRange(source); +} + bool OmpVisitor::Pre(const parser::OmpBlockConstruct &x) { if (NeedsScope(x)) { - PushScope(Scope::Kind::OtherConstruct, nullptr); + PushScopeWithSource(Scope::Kind::OtherConstruct, x.source); } return true; } _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
