[llvm-branch-commits] [flang] release/22.x: [flang][OpenMP] Add source range to construct scopes (#179259) (PR #180202)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Feb 6 06:51:26 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport e0d922ee20e1948b2a1a2aa9689ceb14796d2a91
Requested by: @<!-- -->kparzysz
---
Full diff: https://github.com/llvm/llvm-project/pull/180202.diff
2 Files Affected:
- (modified) flang/lib/Lower/OpenMP/DataSharingProcessor.cpp (+1-2)
- (modified) flang/lib/Semantics/resolve-names.cpp (+14-6)
``````````diff
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;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/180202
More information about the llvm-branch-commits
mailing list