[flang-commits] [flang] [flang][OpenMP] Add source range to construct scopes (PR #179259)
Krzysztof Parzyszek via flang-commits
flang-commits at lists.llvm.org
Mon Feb 2 07:56:35 PST 2026
https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/179259
>From 7ed41f2986b00fa58c26346c8eeb16056f9c4a66 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Fri, 30 Jan 2026 16:51:53 -0600
Subject: [PATCH 1/3] [flang][OpenMP] Add source range to construct scopes
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).
---
.../lib/Lower/OpenMP/DataSharingProcessor.cpp | 3 +--
flang/lib/Semantics/resolve-names.cpp | 24 +++++++++++--------
2 files changed, 15 insertions(+), 12 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 16b76b72880c9..bf875737fd132 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1569,14 +1569,12 @@ 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 &);
- bool Pre(const parser::OpenMPRequiresConstruct &x) {
- AddOmpSourceRange(x.source);
- return true;
- }
bool Pre(const parser::OmpBlockConstruct &);
void Post(const parser::OmpBlockConstruct &);
bool Pre(const parser::OmpBeginDirective &x) {
@@ -1592,8 +1590,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(); }
@@ -1637,8 +1635,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(); }
@@ -1744,7 +1742,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;
}
@@ -1813,9 +1811,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;
}
>From d1de7de3cc671ac057f12346cf60e1cf306398a6 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Mon, 2 Feb 2026 09:43:03 -0600
Subject: [PATCH 2/3] format
---
flang/lib/Semantics/resolve-names.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index bf875737fd132..f3693fedcae71 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1812,7 +1812,7 @@ void OmpVisitor::AddOmpSourceRange(const parser::CharBlock &source) {
}
void OmpVisitor::PushScopeWithSource(
- Scope::Kind kind, parser::CharBlock source, Symbol *symbol) {
+ Scope::Kind kind, parser::CharBlock source, Symbol *symbol) {
PushScope(kind, symbol);
currScope().AddSourceRange(source);
}
>From a81625c941a582a9902c40ef9f3308d31bbd4256 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Mon, 2 Feb 2026 09:56:25 -0600
Subject: [PATCH 3/3] Remove leftover unrelated change
---
flang/lib/Semantics/resolve-names.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index f3693fedcae71..db84cc40c4283 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1575,6 +1575,10 @@ class OmpVisitor : public virtual DeclarationVisitor {
static bool NeedsScope(const parser::OmpBlockConstruct &);
static bool NeedsScope(const parser::OmpClause &);
+ bool Pre(const parser::OpenMPRequiresConstruct &x) {
+ AddOmpSourceRange(x.source);
+ return true;
+ }
bool Pre(const parser::OmpBlockConstruct &);
void Post(const parser::OmpBlockConstruct &);
bool Pre(const parser::OmpBeginDirective &x) {
More information about the flang-commits
mailing list