Skip to content

Commit 5cd9f0f

Browse files
authored
[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.
1 parent be9c083 commit 5cd9f0f

File tree

11 files changed

+29
-23
lines changed

11 files changed

+29
-23
lines changed

flang/include/flang/Parser/tools.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,5 +259,7 @@ template <typename A> std::optional<CharBlock> GetLastSource(A &x) {
259259
// Checks whether the assignment statement has a single variable on the RHS.
260260
bool CheckForSingleVariableOnRHS(const AssignmentStmt &);
261261

262+
const Name *GetDesignatorNameIfDataRef(const Designator &);
263+
262264
} // namespace Fortran::parser
263265
#endif // FORTRAN_PARSER_TOOLS_H_

flang/include/flang/Semantics/tools.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -739,12 +739,6 @@ const DerivedTypeSpec *GetDtvArgDerivedType(const Symbol &);
739739
void WarnOnDeferredLengthCharacterScalar(SemanticsContext &, const SomeExpr *,
740740
parser::CharBlock at, const char *what);
741741

742-
inline const parser::Name *getDesignatorNameIfDataRef(
743-
const parser::Designator &designator) {
744-
const auto *dataRef{std::get_if<parser::DataRef>(&designator.u)};
745-
return dataRef ? std::get_if<parser::Name>(&dataRef->u) : nullptr;
746-
}
747-
748742
bool CouldBeDataPointerValuedFunction(const Symbol *);
749743

750744
template <typename R, typename T>

flang/lib/Lower/Bridge.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
#include "flang/Optimizer/Support/InternalNames.h"
5959
#include "flang/Optimizer/Transforms/Passes.h"
6060
#include "flang/Parser/parse-tree.h"
61+
#include "flang/Parser/tools.h"
6162
#include "flang/Runtime/iostat-consts.h"
6263
#include "flang/Semantics/openmp-dsa.h"
6364
#include "flang/Semantics/runtime-type-info.h"
@@ -3352,7 +3353,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
33523353
&var.u)) {
33533354
const Fortran::parser::Designator &designator = iDesignator->value();
33543355
if (const auto *name =
3355-
Fortran::semantics::getDesignatorNameIfDataRef(designator)) {
3356+
Fortran::parser::GetDesignatorNameIfDataRef(designator)) {
33563357
auto val = getSymbolAddress(*name->symbol);
33573358
reduceOperands.push_back(val);
33583359
}

flang/lib/Lower/OpenACC.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "flang/Optimizer/Dialect/FIRType.h"
3131
#include "flang/Parser/parse-tree-visitor.h"
3232
#include "flang/Parser/parse-tree.h"
33+
#include "flang/Parser/tools.h"
3334
#include "flang/Semantics/expression.h"
3435
#include "flang/Semantics/scope.h"
3536
#include "flang/Semantics/tools.h"
@@ -297,7 +298,7 @@ getSymbolFromAccObject(const Fortran::parser::AccObject &accObject) {
297298
if (const auto *designator =
298299
std::get_if<Fortran::parser::Designator>(&accObject.u)) {
299300
if (const auto *name =
300-
Fortran::semantics::getDesignatorNameIfDataRef(*designator))
301+
Fortran::parser::GetDesignatorNameIfDataRef(*designator))
301302
return *name->symbol;
302303
if (const auto *arrayElement =
303304
Fortran::parser::Unwrap<Fortran::parser::ArrayElement>(
@@ -2913,7 +2914,7 @@ static Op createComputeOp(
29132914
if (const auto *designator =
29142915
std::get_if<Fortran::parser::Designator>(&accObject.u)) {
29152916
if (const auto *name =
2916-
Fortran::semantics::getDesignatorNameIfDataRef(
2917+
Fortran::parser::GetDesignatorNameIfDataRef(
29172918
*designator)) {
29182919
auto cond = converter.getSymbolAddress(*name->symbol);
29192920
selfCond = builder.createConvert(clauseLocation,
@@ -4278,8 +4279,7 @@ static void genGlobalCtors(Fortran::lower::AbstractConverter &converter,
42784279
Fortran::common::visitors{
42794280
[&](const Fortran::parser::Designator &designator) {
42804281
if (const auto *name =
4281-
Fortran::semantics::getDesignatorNameIfDataRef(
4282-
designator)) {
4282+
Fortran::parser::GetDesignatorNameIfDataRef(designator)) {
42834283
genCtors(operandLocation, *name->symbol);
42844284
}
42854285
},

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "flang/Parser/characters.h"
3434
#include "flang/Parser/openmp-utils.h"
3535
#include "flang/Parser/parse-tree.h"
36+
#include "flang/Parser/tools.h"
3637
#include "flang/Semantics/openmp-directive-sets.h"
3738
#include "flang/Semantics/openmp-utils.h"
3839
#include "flang/Semantics/tools.h"
@@ -3884,7 +3885,7 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
38843885
assert(object && "Expecting object as argument");
38853886
auto *designator = semantics::omp::GetDesignatorFromObj(*object);
38863887
assert(designator && "Expecting desginator in argument");
3887-
auto *name = semantics::getDesignatorNameIfDataRef(*designator);
3888+
auto *name = parser::GetDesignatorNameIfDataRef(*designator);
38883889
assert(name && "Expecting dataref in designator");
38893890
critName = *name;
38903891
}

flang/lib/Parser/tools.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,9 @@ bool CheckForSingleVariableOnRHS(const AssignmentStmt &assignmentStmt) {
179179
return Unwrap<Designator>(std::get<Expr>(assignmentStmt.t)) != nullptr;
180180
}
181181

182+
const Name *GetDesignatorNameIfDataRef(const Designator &designator) {
183+
const auto *dataRef{std::get_if<DataRef>(&designator.u)};
184+
return dataRef ? std::get_if<Name>(&dataRef->u) : nullptr;
185+
}
186+
182187
} // namespace Fortran::parser

flang/lib/Semantics/check-acc-structure.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "flang/Common/enum-set.h"
1111
#include "flang/Evaluate/tools.h"
1212
#include "flang/Parser/parse-tree.h"
13+
#include "flang/Parser/tools.h"
1314
#include "flang/Semantics/symbol.h"
1415
#include "flang/Semantics/tools.h"
1516
#include "flang/Semantics/type.h"
@@ -709,7 +710,8 @@ void AccStructureChecker::CheckMultipleOccurrenceInDeclare(
709710
common::visit(
710711
common::visitors{
711712
[&](const parser::Designator &designator) {
712-
if (const auto *name = getDesignatorNameIfDataRef(designator)) {
713+
if (const auto *name =
714+
parser::GetDesignatorNameIfDataRef(designator)) {
713715
if (declareSymbols.contains(&name->symbol->GetUltimate())) {
714716
if (declareSymbols[&name->symbol->GetUltimate()] == clause) {
715717
context_.Warn(common::UsageWarning::OpenAccUsage,
@@ -982,7 +984,8 @@ void AccStructureChecker::Enter(const parser::AccClause::Reduction &reduction) {
982984
common::visit(
983985
common::visitors{
984986
[&](const parser::Designator &designator) {
985-
if (const auto *name = getDesignatorNameIfDataRef(designator)) {
987+
if (const auto *name =
988+
parser::GetDesignatorNameIfDataRef(designator)) {
986989
if (name->symbol) {
987990
if (const auto *type{name->symbol->GetType()}) {
988991
if (type->IsNumeric(TypeCategory::Integer) &&

flang/lib/Semantics/check-omp-loop.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,8 @@ void OmpStructureChecker::Leave(const parser::OpenMPLoopConstruct &x) {
485485
common::visit(
486486
common::visitors{
487487
[&](const parser::Designator &designator) {
488-
if (const auto *name{semantics::getDesignatorNameIfDataRef(
489-
designator)}) {
488+
if (const auto *name{
489+
parser::GetDesignatorNameIfDataRef(designator)}) {
490490
checkReductionSymbolInScan(name);
491491
}
492492
},

flang/lib/Semantics/check-omp-structure.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2617,7 +2617,7 @@ void OmpStructureChecker::Enter(const parser::OpenMPCriticalConstruct &x) {
26172617
auto getNameFromArg{[](const parser::OmpArgument &arg) {
26182618
if (auto *object{parser::Unwrap<parser::OmpObject>(arg.u)}) {
26192619
if (auto *designator{omp::GetDesignatorFromObj(*object)}) {
2620-
return getDesignatorNameIfDataRef(*designator);
2620+
return parser::GetDesignatorNameIfDataRef(*designator);
26212621
}
26222622
}
26232623
return static_cast<const parser::Name *>(nullptr);

flang/lib/Semantics/resolve-directives.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> {
893893
common::visitors{
894894
[&](const parser::Designator &designator) {
895895
if (const auto *name{
896-
semantics::getDesignatorNameIfDataRef(designator)}) {
896+
parser::GetDesignatorNameIfDataRef(designator)}) {
897897
if (name->symbol) {
898898
name->symbol->set(
899899
ompFlag.value_or(Symbol::Flag::OmpMapStorage));
@@ -1759,7 +1759,7 @@ void AccAttributeVisitor::ResolveAccObject(
17591759
common::visitors{
17601760
[&](const parser::Designator &designator) {
17611761
if (const auto *name{
1762-
semantics::getDesignatorNameIfDataRef(designator)}) {
1762+
parser::GetDesignatorNameIfDataRef(designator)}) {
17631763
if (auto *symbol{ResolveAcc(*name, accFlag, currScope())}) {
17641764
AddToContextObjectWithDSA(*symbol, accFlag);
17651765
if (dataSharingAttributeFlags.test(accFlag)) {
@@ -3065,7 +3065,7 @@ void OmpAttributeVisitor::ResolveOmpDesignator(
30653065
unsigned version{context_.langOptions().OpenMPVersion};
30663066
llvm::omp::Directive directive{GetContext().directive};
30673067

3068-
const auto *name{semantics::getDesignatorNameIfDataRef(designator)};
3068+
const auto *name{parser::GetDesignatorNameIfDataRef(designator)};
30693069
if (!name) {
30703070
// Array sections to be changed to substrings as needed
30713071
if (AnalyzeExpr(context_, designator)) {

0 commit comments

Comments
 (0)