[flang-commits] [flang] 5cd9f0f - [flang] Move parse tree tool to Parser/tools.h (#163998)
via flang-commits
flang-commits at lists.llvm.org
Mon Oct 20 13:20:36 PDT 2025
Author: Peter Klausler
Date: 2025-10-20T13:20:33-07:00
New Revision: 5cd9f0f655ac2ab9da4fbd049fbcba6eb0d793b9
URL: https://github.com/llvm/llvm-project/commit/5cd9f0f655ac2ab9da4fbd049fbcba6eb0d793b9
DIFF: https://github.com/llvm/llvm-project/commit/5cd9f0f655ac2ab9da4fbd049fbcba6eb0d793b9.diff
LOG: [flang] Move parse tree tool to Parser/tools.h (#163998)
Move the parse tree utility function
semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to
comply with the local style.
Added:
Modified:
flang/include/flang/Parser/tools.h
flang/include/flang/Semantics/tools.h
flang/lib/Lower/Bridge.cpp
flang/lib/Lower/OpenACC.cpp
flang/lib/Lower/OpenMP/OpenMP.cpp
flang/lib/Parser/tools.cpp
flang/lib/Semantics/check-acc-structure.cpp
flang/lib/Semantics/check-omp-loop.cpp
flang/lib/Semantics/check-omp-structure.cpp
flang/lib/Semantics/resolve-directives.cpp
flang/lib/Semantics/resolve-names.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Parser/tools.h b/flang/include/flang/Parser/tools.h
index a90c85625d70d..d105f03dd31d3 100644
--- a/flang/include/flang/Parser/tools.h
+++ b/flang/include/flang/Parser/tools.h
@@ -259,5 +259,7 @@ template <typename A> std::optional<CharBlock> GetLastSource(A &x) {
// Checks whether the assignment statement has a single variable on the RHS.
bool CheckForSingleVariableOnRHS(const AssignmentStmt &);
+const Name *GetDesignatorNameIfDataRef(const Designator &);
+
} // namespace Fortran::parser
#endif // FORTRAN_PARSER_TOOLS_H_
diff --git a/flang/include/flang/Semantics/tools.h b/flang/include/flang/Semantics/tools.h
index b977fb812fb11..8a7b9867c0979 100644
--- a/flang/include/flang/Semantics/tools.h
+++ b/flang/include/flang/Semantics/tools.h
@@ -739,12 +739,6 @@ const DerivedTypeSpec *GetDtvArgDerivedType(const Symbol &);
void WarnOnDeferredLengthCharacterScalar(SemanticsContext &, const SomeExpr *,
parser::CharBlock at, const char *what);
-inline const parser::Name *getDesignatorNameIfDataRef(
- const parser::Designator &designator) {
- const auto *dataRef{std::get_if<parser::DataRef>(&designator.u)};
- return dataRef ? std::get_if<parser::Name>(&dataRef->u) : nullptr;
-}
-
bool CouldBeDataPointerValuedFunction(const Symbol *);
template <typename R, typename T>
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 0595ca063f407..3b711ccbe786a 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -58,6 +58,7 @@
#include "flang/Optimizer/Support/InternalNames.h"
#include "flang/Optimizer/Transforms/Passes.h"
#include "flang/Parser/parse-tree.h"
+#include "flang/Parser/tools.h"
#include "flang/Runtime/iostat-consts.h"
#include "flang/Semantics/openmp-dsa.h"
#include "flang/Semantics/runtime-type-info.h"
@@ -3352,7 +3353,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
&var.u)) {
const Fortran::parser::Designator &designator = iDesignator->value();
if (const auto *name =
- Fortran::semantics::getDesignatorNameIfDataRef(designator)) {
+ Fortran::parser::GetDesignatorNameIfDataRef(designator)) {
auto val = getSymbolAddress(*name->symbol);
reduceOperands.push_back(val);
}
diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp
index 69718eed1d781..b3e8b697df1e9 100644
--- a/flang/lib/Lower/OpenACC.cpp
+++ b/flang/lib/Lower/OpenACC.cpp
@@ -30,6 +30,7 @@
#include "flang/Optimizer/Dialect/FIRType.h"
#include "flang/Parser/parse-tree-visitor.h"
#include "flang/Parser/parse-tree.h"
+#include "flang/Parser/tools.h"
#include "flang/Semantics/expression.h"
#include "flang/Semantics/scope.h"
#include "flang/Semantics/tools.h"
@@ -297,7 +298,7 @@ getSymbolFromAccObject(const Fortran::parser::AccObject &accObject) {
if (const auto *designator =
std::get_if<Fortran::parser::Designator>(&accObject.u)) {
if (const auto *name =
- Fortran::semantics::getDesignatorNameIfDataRef(*designator))
+ Fortran::parser::GetDesignatorNameIfDataRef(*designator))
return *name->symbol;
if (const auto *arrayElement =
Fortran::parser::Unwrap<Fortran::parser::ArrayElement>(
@@ -2913,7 +2914,7 @@ static Op createComputeOp(
if (const auto *designator =
std::get_if<Fortran::parser::Designator>(&accObject.u)) {
if (const auto *name =
- Fortran::semantics::getDesignatorNameIfDataRef(
+ Fortran::parser::GetDesignatorNameIfDataRef(
*designator)) {
auto cond = converter.getSymbolAddress(*name->symbol);
selfCond = builder.createConvert(clauseLocation,
@@ -4278,8 +4279,7 @@ static void genGlobalCtors(Fortran::lower::AbstractConverter &converter,
Fortran::common::visitors{
[&](const Fortran::parser::Designator &designator) {
if (const auto *name =
- Fortran::semantics::getDesignatorNameIfDataRef(
- designator)) {
+ Fortran::parser::GetDesignatorNameIfDataRef(designator)) {
genCtors(operandLocation, *name->symbol);
}
},
diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp
index f86ee01355104..9495ea61058ca 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -33,6 +33,7 @@
#include "flang/Parser/characters.h"
#include "flang/Parser/openmp-utils.h"
#include "flang/Parser/parse-tree.h"
+#include "flang/Parser/tools.h"
#include "flang/Semantics/openmp-directive-sets.h"
#include "flang/Semantics/openmp-utils.h"
#include "flang/Semantics/tools.h"
@@ -3884,7 +3885,7 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
assert(object && "Expecting object as argument");
auto *designator = semantics::omp::GetDesignatorFromObj(*object);
assert(designator && "Expecting desginator in argument");
- auto *name = semantics::getDesignatorNameIfDataRef(*designator);
+ auto *name = parser::GetDesignatorNameIfDataRef(*designator);
assert(name && "Expecting dataref in designator");
critName = *name;
}
diff --git a/flang/lib/Parser/tools.cpp b/flang/lib/Parser/tools.cpp
index 264ca520f38b8..ed6d194c17dc3 100644
--- a/flang/lib/Parser/tools.cpp
+++ b/flang/lib/Parser/tools.cpp
@@ -179,4 +179,9 @@ bool CheckForSingleVariableOnRHS(const AssignmentStmt &assignmentStmt) {
return Unwrap<Designator>(std::get<Expr>(assignmentStmt.t)) != nullptr;
}
+const Name *GetDesignatorNameIfDataRef(const Designator &designator) {
+ const auto *dataRef{std::get_if<DataRef>(&designator.u)};
+ return dataRef ? std::get_if<Name>(&dataRef->u) : nullptr;
+}
+
} // namespace Fortran::parser
diff --git a/flang/lib/Semantics/check-acc-structure.cpp b/flang/lib/Semantics/check-acc-structure.cpp
index 3cd6d6ba7689a..5e87b834edf7e 100644
--- a/flang/lib/Semantics/check-acc-structure.cpp
+++ b/flang/lib/Semantics/check-acc-structure.cpp
@@ -10,6 +10,7 @@
#include "flang/Common/enum-set.h"
#include "flang/Evaluate/tools.h"
#include "flang/Parser/parse-tree.h"
+#include "flang/Parser/tools.h"
#include "flang/Semantics/symbol.h"
#include "flang/Semantics/tools.h"
#include "flang/Semantics/type.h"
@@ -709,7 +710,8 @@ void AccStructureChecker::CheckMultipleOccurrenceInDeclare(
common::visit(
common::visitors{
[&](const parser::Designator &designator) {
- if (const auto *name = getDesignatorNameIfDataRef(designator)) {
+ if (const auto *name =
+ parser::GetDesignatorNameIfDataRef(designator)) {
if (declareSymbols.contains(&name->symbol->GetUltimate())) {
if (declareSymbols[&name->symbol->GetUltimate()] == clause) {
context_.Warn(common::UsageWarning::OpenAccUsage,
@@ -982,7 +984,8 @@ void AccStructureChecker::Enter(const parser::AccClause::Reduction &reduction) {
common::visit(
common::visitors{
[&](const parser::Designator &designator) {
- if (const auto *name = getDesignatorNameIfDataRef(designator)) {
+ if (const auto *name =
+ parser::GetDesignatorNameIfDataRef(designator)) {
if (name->symbol) {
if (const auto *type{name->symbol->GetType()}) {
if (type->IsNumeric(TypeCategory::Integer) &&
diff --git a/flang/lib/Semantics/check-omp-loop.cpp b/flang/lib/Semantics/check-omp-loop.cpp
index 331397b035cf9..aaaa2d6e78280 100644
--- a/flang/lib/Semantics/check-omp-loop.cpp
+++ b/flang/lib/Semantics/check-omp-loop.cpp
@@ -485,8 +485,8 @@ void OmpStructureChecker::Leave(const parser::OpenMPLoopConstruct &x) {
common::visit(
common::visitors{
[&](const parser::Designator &designator) {
- if (const auto *name{semantics::getDesignatorNameIfDataRef(
- designator)}) {
+ if (const auto *name{
+ parser::GetDesignatorNameIfDataRef(designator)}) {
checkReductionSymbolInScan(name);
}
},
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index e015e948bc701..e2f8796aeb5e7 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -2617,7 +2617,7 @@ void OmpStructureChecker::Enter(const parser::OpenMPCriticalConstruct &x) {
auto getNameFromArg{[](const parser::OmpArgument &arg) {
if (auto *object{parser::Unwrap<parser::OmpObject>(arg.u)}) {
if (auto *designator{omp::GetDesignatorFromObj(*object)}) {
- return getDesignatorNameIfDataRef(*designator);
+ return parser::GetDesignatorNameIfDataRef(*designator);
}
}
return static_cast<const parser::Name *>(nullptr);
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index db061bdce18ea..3bb586c51c58f 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -893,7 +893,7 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> {
common::visitors{
[&](const parser::Designator &designator) {
if (const auto *name{
- semantics::getDesignatorNameIfDataRef(designator)}) {
+ parser::GetDesignatorNameIfDataRef(designator)}) {
if (name->symbol) {
name->symbol->set(
ompFlag.value_or(Symbol::Flag::OmpMapStorage));
@@ -1759,7 +1759,7 @@ void AccAttributeVisitor::ResolveAccObject(
common::visitors{
[&](const parser::Designator &designator) {
if (const auto *name{
- semantics::getDesignatorNameIfDataRef(designator)}) {
+ parser::GetDesignatorNameIfDataRef(designator)}) {
if (auto *symbol{ResolveAcc(*name, accFlag, currScope())}) {
AddToContextObjectWithDSA(*symbol, accFlag);
if (dataSharingAttributeFlags.test(accFlag)) {
@@ -3065,7 +3065,7 @@ void OmpAttributeVisitor::ResolveOmpDesignator(
unsigned version{context_.langOptions().OpenMPVersion};
llvm::omp::Directive directive{GetContext().directive};
- const auto *name{semantics::getDesignatorNameIfDataRef(designator)};
+ const auto *name{parser::GetDesignatorNameIfDataRef(designator)};
if (!name) {
// Array sections to be changed to substrings as needed
if (AnalyzeExpr(context_, designator)) {
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 699de417a629f..0af1c94502bb4 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1494,7 +1494,7 @@ bool AccVisitor::Pre(const parser::AccClause::UseDevice &x) {
common::visitors{
[&](const parser::Designator &designator) {
if (const auto *name{
- semantics::getDesignatorNameIfDataRef(designator)}) {
+ parser::GetDesignatorNameIfDataRef(designator)}) {
Symbol *prev{currScope().FindSymbol(name->source)};
if (prev != name->symbol) {
name->symbol = prev;
@@ -1648,7 +1648,7 @@ class OmpVisitor : public virtual DeclarationVisitor {
common::visitors{
[&](const parser::Designator &designator) {
if (const auto *name{
- semantics::getDesignatorNameIfDataRef(designator)}) {
+ parser::GetDesignatorNameIfDataRef(designator)}) {
specPartState_.declareTargetNames.insert(name->source);
}
},
@@ -2016,7 +2016,7 @@ void OmpVisitor::ResolveCriticalName(const parser::OmpArgument &arg) {
if (auto *object{parser::Unwrap<parser::OmpObject>(arg.u)}) {
if (auto *desg{omp::GetDesignatorFromObj(*object)}) {
- if (auto *name{getDesignatorNameIfDataRef(*desg)}) {
+ if (auto *name{parser::GetDesignatorNameIfDataRef(*desg)}) {
if (auto *symbol{FindInScope(globalScope, *name)}) {
if (!symbol->test(Symbol::Flag::OmpCriticalLock)) {
SayWithDecl(*name, *symbol,
More information about the flang-commits
mailing list