-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[flang] Move parse tree tool to Parser/tools.h #163998
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Move the parse tree utility function semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to comply with the local style.
|
@llvm/pr-subscribers-flang-openmp @llvm/pr-subscribers-flang-semantics Author: Peter Klausler (klausler) ChangesMove the parse tree utility function semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to comply with the local style. Full diff: https://github.com/llvm/llvm-project/pull/163998.diff 11 Files Affected:
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 68adf346fe8c0..1a0db0ea506c5 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 cfb18914e8126..2206689cbbf61 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"
@@ -296,7 +297,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>(
@@ -2900,7 +2901,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,
@@ -4261,8 +4262,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 c9d0495850b6e..d78508cd02ae1 100644
--- a/flang/lib/Semantics/check-omp-loop.cpp
+++ b/flang/lib/Semantics/check-omp-loop.cpp
@@ -486,8 +486,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 ea6fe43f07de8..06f42e1334669 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -2616,7 +2616,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 7067ed3d99286..448ebcadf7eae 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -892,7 +892,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));
@@ -1758,7 +1758,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)) {
@@ -3064,7 +3064,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,
|
clementval
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Move the parse tree utility function semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to comply with the local style.
Move the parse tree utility function semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to comply with the local style.
Move the parse tree utility function semantics::getDesignatorNameIfDataRef to Parser/tools.h and rename it to comply with the local style.