diff --git a/flang/include/flang/Semantics/tools.h b/flang/include/flang/Semantics/tools.h --- a/flang/include/flang/Semantics/tools.h +++ b/flang/include/flang/Semantics/tools.h @@ -656,5 +656,11 @@ 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(&designator.u)}; + return dataRef ? std::get_if(&dataRef->u) : nullptr; +} + } // namespace Fortran::semantics #endif // FORTRAN_SEMANTICS_TOOLS_H_ diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -30,12 +30,6 @@ // Special value for * passed in device_type or gang clauses. static constexpr std::int64_t starCst = -1; -static const Fortran::parser::Name * -getDesignatorNameIfDataRef(const Fortran::parser::Designator &designator) { - const auto *dataRef = std::get_if(&designator.u); - return dataRef ? std::get_if(&dataRef->u) : nullptr; -} - /// Generate the acc.bounds operation from the descriptor information. static llvm::SmallVector genBoundsOpsFromBox(fir::FirOpBuilder &builder, mlir::Location loc, @@ -1354,7 +1348,9 @@ const auto &accObject = accClauseList->v.front(); if (const auto *designator = std::get_if(&accObject.u)) { - if (const auto *name = getDesignatorNameIfDataRef(*designator)) { + if (const auto *name = + Fortran::semantics::getDesignatorNameIfDataRef( + *designator)) { auto cond = converter.getSymbolAddress(*name->symbol); selfCond = builder.createConvert(clauseLocation, builder.getI1Type(), cond); diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp --- a/flang/lib/Lower/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP.cpp @@ -48,19 +48,14 @@ return 1; } -static const Fortran::parser::Name * -getDesignatorNameIfDataRef(const Fortran::parser::Designator &designator) { - const auto *dataRef = std::get_if(&designator.u); - return dataRef ? std::get_if(&dataRef->u) : nullptr; -} - static Fortran::semantics::Symbol * getOmpObjectSymbol(const Fortran::parser::OmpObject &ompObject) { Fortran::semantics::Symbol *sym = nullptr; std::visit(Fortran::common::visitors{ [&](const Fortran::parser::Designator &designator) { if (const Fortran::parser::Name *name = - getDesignatorNameIfDataRef(designator)) { + Fortran::semantics::getDesignatorNameIfDataRef( + designator)) { sym = name->symbol; } }, @@ -2181,7 +2176,9 @@ std::get_if>( &expr.u); const Fortran::parser::Name *name = - designator ? getDesignatorNameIfDataRef(designator->value()) : nullptr; + designator + ? Fortran::semantics::getDesignatorNameIfDataRef(designator->value()) + : nullptr; return name != nullptr; } @@ -2328,7 +2325,8 @@ &assignmentStmtVariable.u); assert(varDesignator && "Variable designator for atomic update assignment " "statement does not exist"); - const auto *name = getDesignatorNameIfDataRef(varDesignator->value()); + const auto *name = + Fortran::semantics::getDesignatorNameIfDataRef(varDesignator->value()); if (!name) TODO(converter.getCurrentLocation(), "Array references as atomic update variable"); @@ -2735,7 +2733,8 @@ Fortran::common::visitors{ [&](const Fortran::parser::Designator &designator) { if (const Fortran::parser::Name *name = - getDesignatorNameIfDataRef(designator)) { + Fortran::semantics::getDesignatorNameIfDataRef( + designator)) { symbolAndClause.push_back( std::make_pair(clause, *name->symbol)); } diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -85,11 +85,6 @@ Symbol &MakeAssocSymbol(const SourceName &name, Symbol &prev) { return MakeAssocSymbol(name, prev, currScope()); } - static const parser::Name *GetDesignatorNameIfDataRef( - const parser::Designator &designator) { - const auto *dataRef{std::get_if(&designator.u)}; - return dataRef ? std::get_if(&dataRef->u) : nullptr; - } void AddDataSharingAttributeObject(SymbolRef object) { dataSharingAttributeObjects_.insert(object); } @@ -504,7 +499,8 @@ common::visit( common::visitors{ [&](const parser::Designator &designator) { - if (const auto *name{GetDesignatorNameIfDataRef(designator)}) { + if (const auto *name{ + semantics::getDesignatorNameIfDataRef(designator)}) { if (name->symbol && semantics::IsAssumedSizeArray(*name->symbol)) { context_.Say(designator.source, @@ -1091,7 +1087,8 @@ common::visit( common::visitors{ [&](const parser::Designator &designator) { - if (const auto *name{GetDesignatorNameIfDataRef(designator)}) { + if (const auto *name{ + semantics::getDesignatorNameIfDataRef(designator)}) { if (auto *symbol{ResolveAcc(*name, accFlag, currScope())}) { AddToContextObjectWithDSA(*symbol, accFlag); if (dataSharingAttributeFlags.test(accFlag)) { @@ -1739,7 +1736,8 @@ common::visit( common::visitors{ [&](const parser::Designator &designator) { - if (const auto *name{GetDesignatorNameIfDataRef(designator)}) { + if (const auto *name{ + semantics::getDesignatorNameIfDataRef(designator)}) { if (auto *symbol{ResolveOmp(*name, ompFlag, currScope())}) { if (dataCopyingAttributeFlags.test(ompFlag)) { CheckDataCopyingClause(*name, *symbol, ompFlag);