Skip to content

Commit 544bf40

Browse files
committed
[flang] Move parse tree tool to Parser/tools.h
Move the parse tree utility function semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to comply with the local style.
1 parent 9458faa commit 544bf40

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"
@@ -296,7 +297,7 @@ getSymbolFromAccObject(const Fortran::parser::AccObject &accObject) {
296297
if (const auto *designator =
297298
std::get_if<Fortran::parser::Designator>(&accObject.u)) {
298299
if (const auto *name =
299-
Fortran::semantics::getDesignatorNameIfDataRef(*designator))
300+
Fortran::parser::GetDesignatorNameIfDataRef(*designator))
300301
return *name->symbol;
301302
if (const auto *arrayElement =
302303
Fortran::parser::Unwrap<Fortran::parser::ArrayElement>(
@@ -2900,7 +2901,7 @@ static Op createComputeOp(
29002901
if (const auto *designator =
29012902
std::get_if<Fortran::parser::Designator>(&accObject.u)) {
29022903
if (const auto *name =
2903-
Fortran::semantics::getDesignatorNameIfDataRef(
2904+
Fortran::parser::GetDesignatorNameIfDataRef(
29042905
*designator)) {
29052906
auto cond = converter.getSymbolAddress(*name->symbol);
29062907
selfCond = builder.createConvert(clauseLocation,
@@ -4261,8 +4262,7 @@ static void genGlobalCtors(Fortran::lower::AbstractConverter &converter,
42614262
Fortran::common::visitors{
42624263
[&](const Fortran::parser::Designator &designator) {
42634264
if (const auto *name =
4264-
Fortran::semantics::getDesignatorNameIfDataRef(
4265-
designator)) {
4265+
Fortran::parser::GetDesignatorNameIfDataRef(designator)) {
42664266
genCtors(operandLocation, *name->symbol);
42674267
}
42684268
},

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
@@ -486,8 +486,8 @@ void OmpStructureChecker::Leave(const parser::OpenMPLoopConstruct &x) {
486486
common::visit(
487487
common::visitors{
488488
[&](const parser::Designator &designator) {
489-
if (const auto *name{semantics::getDesignatorNameIfDataRef(
490-
designator)}) {
489+
if (const auto *name{
490+
parser::GetDesignatorNameIfDataRef(designator)}) {
491491
checkReductionSymbolInScan(name);
492492
}
493493
},

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2616,7 +2616,7 @@ void OmpStructureChecker::Enter(const parser::OpenMPCriticalConstruct &x) {
26162616
auto getNameFromArg{[](const parser::OmpArgument &arg) {
26172617
if (auto *object{parser::Unwrap<parser::OmpObject>(arg.u)}) {
26182618
if (auto *designator{omp::GetDesignatorFromObj(*object)}) {
2619-
return getDesignatorNameIfDataRef(*designator);
2619+
return parser::GetDesignatorNameIfDataRef(*designator);
26202620
}
26212621
}
26222622
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
@@ -892,7 +892,7 @@ class OmpAttributeVisitor : DirectiveAttributeVisitor<llvm::omp::Directive> {
892892
common::visitors{
893893
[&](const parser::Designator &designator) {
894894
if (const auto *name{
895-
semantics::getDesignatorNameIfDataRef(designator)}) {
895+
parser::GetDesignatorNameIfDataRef(designator)}) {
896896
if (name->symbol) {
897897
name->symbol->set(
898898
ompFlag.value_or(Symbol::Flag::OmpMapStorage));
@@ -1758,7 +1758,7 @@ void AccAttributeVisitor::ResolveAccObject(
17581758
common::visitors{
17591759
[&](const parser::Designator &designator) {
17601760
if (const auto *name{
1761-
semantics::getDesignatorNameIfDataRef(designator)}) {
1761+
parser::GetDesignatorNameIfDataRef(designator)}) {
17621762
if (auto *symbol{ResolveAcc(*name, accFlag, currScope())}) {
17631763
AddToContextObjectWithDSA(*symbol, accFlag);
17641764
if (dataSharingAttributeFlags.test(accFlag)) {
@@ -3064,7 +3064,7 @@ void OmpAttributeVisitor::ResolveOmpDesignator(
30643064
unsigned version{context_.langOptions().OpenMPVersion};
30653065
llvm::omp::Directive directive{GetContext().directive};
30663066

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

0 commit comments

Comments
 (0)