Skip to content

Commit 536ade9

Browse files
[Flang] Switch to common::visit more call sites
1 parent 63ecd2a commit 536ade9

29 files changed

+399
-361
lines changed

flang/include/flang/Evaluate/tools.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,12 +448,12 @@ struct ExtractSubstringHelper {
448448

449449
template <typename T>
450450
static std::optional<Substring> visit(const Designator<T> &e) {
451-
return std::visit([](auto &&s) { return visit(s); }, e.u);
451+
return common::visit([](auto &&s) { return visit(s); }, e.u);
452452
}
453453

454454
template <typename T>
455455
static std::optional<Substring> visit(const Expr<T> &e) {
456-
return std::visit([](auto &&s) { return visit(s); }, e.u);
456+
return common::visit([](auto &&s) { return visit(s); }, e.u);
457457
}
458458
};
459459

flang/include/flang/Lower/DumpEvaluateExpr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class DumpEvaluateExpr {
6868
}
6969
template <typename... A>
7070
void show(const std::variant<A...> &u) {
71-
std::visit([&](const auto &v) { show(v); }, u);
71+
Fortran::common::visit([&](const auto &v) { show(v); }, u);
7272
}
7373
template <typename A>
7474
void show(const std::vector<A> &x) {

flang/include/flang/Lower/PFTBuilder.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class ReferenceVariantBase {
7373
}
7474
template <typename VISITOR>
7575
constexpr auto visit(VISITOR &&visitor) const {
76-
return std::visit(
76+
return Fortran::common::visit(
7777
common::visitors{[&visitor](auto ref) { return visitor(ref.get()); }},
7878
u);
7979
}
@@ -489,7 +489,8 @@ struct Variable {
489489

490490
/// Is this variable a global?
491491
bool isGlobal() const {
492-
return std::visit([](const auto &x) { return x.isGlobal(); }, var);
492+
return Fortran::common::visit([](const auto &x) { return x.isGlobal(); },
493+
var);
493494
}
494495

495496
/// Is this a module or submodule variable?
@@ -499,7 +500,7 @@ struct Variable {
499500
}
500501

501502
const Fortran::semantics::Scope *getOwningScope() const {
502-
return std::visit(
503+
return Fortran::common::visit(
503504
common::visitors{
504505
[](const Nominal &x) { return &x.symbol->GetUltimate().owner(); },
505506
[](const AggregateStore &agg) { return &agg.getOwningScope(); }},

flang/include/flang/Lower/Support/Utils.h

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ static Fortran::lower::SomeExpr ignoreEvConvert(const A &x) {
6969
inline Fortran::lower::SomeExpr
7070
ignoreEvConvert(const Fortran::evaluate::Expr<Fortran::evaluate::Type<
7171
Fortran::common::TypeCategory::Integer, 8>> &x) {
72-
return std::visit([](const auto &v) { return ignoreEvConvert(v); }, x.u);
72+
return Fortran::common::visit(
73+
[](const auto &v) { return ignoreEvConvert(v); }, x.u);
7374
}
7475

7576
/// Zip two containers of the same size together and flatten the pairs. `flatZip
@@ -119,7 +120,8 @@ class HashEvaluateExpr {
119120
return 0u;
120121
}
121122
static unsigned getHashValue(const Fortran::evaluate::Subscript &x) {
122-
return std::visit([&](const auto &v) { return getHashValue(v); }, x.u);
123+
return Fortran::common::visit(
124+
[&](const auto &v) { return getHashValue(v); }, x.u);
123125
}
124126
static unsigned getHashValue(const Fortran::evaluate::Triplet &x) {
125127
return getHashValue(x.lower()) - getHashValue(x.upper()) * 5u -
@@ -154,7 +156,8 @@ class HashEvaluateExpr {
154156
return getHashValue(x.GetComponent()) * 13u;
155157
}
156158
static unsigned getHashValue(const Fortran::evaluate::DataRef &x) {
157-
return std::visit([&](const auto &v) { return getHashValue(v); }, x.u);
159+
return Fortran::common::visit(
160+
[&](const auto &v) { return getHashValue(v); }, x.u);
158161
}
159162
static unsigned getHashValue(const Fortran::evaluate::ComplexPart &x) {
160163
return getHashValue(x.complex()) - static_cast<unsigned>(x.part());
@@ -247,8 +250,9 @@ class HashEvaluateExpr {
247250
return getHashValue(sym.get());
248251
}
249252
static unsigned getHashValue(const Fortran::evaluate::Substring &x) {
250-
return 61u * std::visit([&](const auto &p) { return getHashValue(p); },
251-
x.parent()) -
253+
return 61u *
254+
Fortran::common::visit(
255+
[&](const auto &p) { return getHashValue(p); }, x.parent()) -
252256
getHashValue(x.lower()) - (getHashValue(x.lower()) + 1u);
253257
}
254258
static unsigned
@@ -270,7 +274,8 @@ class HashEvaluateExpr {
270274
}
271275
static unsigned
272276
getHashValue(const Fortran::evaluate::ProcedureDesignator &x) {
273-
return std::visit([&](const auto &v) { return getHashValue(v); }, x.u);
277+
return Fortran::common::visit(
278+
[&](const auto &v) { return getHashValue(v); }, x.u);
274279
}
275280
static unsigned getHashValue(const Fortran::evaluate::ProcedureRef &x) {
276281
unsigned args = 13u;
@@ -321,15 +326,18 @@ class HashEvaluateExpr {
321326
}
322327
template <typename A>
323328
static unsigned getHashValue(const Fortran::evaluate::Expr<A> &x) {
324-
return std::visit([&](const auto &v) { return getHashValue(v); }, x.u);
329+
return Fortran::common::visit(
330+
[&](const auto &v) { return getHashValue(v); }, x.u);
325331
}
326332
static unsigned getHashValue(
327333
const Fortran::evaluate::Relational<Fortran::evaluate::SomeType> &x) {
328-
return std::visit([&](const auto &v) { return getHashValue(v); }, x.u);
334+
return Fortran::common::visit(
335+
[&](const auto &v) { return getHashValue(v); }, x.u);
329336
}
330337
template <typename A>
331338
static unsigned getHashValue(const Fortran::evaluate::Designator<A> &x) {
332-
return std::visit([&](const auto &v) { return getHashValue(v); }, x.u);
339+
return Fortran::common::visit(
340+
[&](const auto &v) { return getHashValue(v); }, x.u);
333341
}
334342
template <int BITS>
335343
static unsigned
@@ -378,7 +386,7 @@ class IsEqualEvaluateExpr {
378386
}
379387
static bool isEqual(const Fortran::evaluate::Subscript &x,
380388
const Fortran::evaluate::Subscript &y) {
381-
return std::visit(
389+
return Fortran::common::visit(
382390
[&](const auto &v, const auto &w) { return isEqual(v, w); }, x.u, y.u);
383391
}
384392
static bool isEqual(const Fortran::evaluate::Triplet &x,
@@ -411,7 +419,7 @@ class IsEqualEvaluateExpr {
411419
}
412420
static bool isEqual(const Fortran::evaluate::DataRef &x,
413421
const Fortran::evaluate::DataRef &y) {
414-
return std::visit(
422+
return Fortran::common::visit(
415423
[&](const auto &v, const auto &w) { return isEqual(v, w); }, x.u, y.u);
416424
}
417425
static bool isEqual(const Fortran::evaluate::ComplexPart &x,
@@ -499,7 +507,7 @@ class IsEqualEvaluateExpr {
499507
}
500508
static bool isEqual(const Fortran::evaluate::Substring &x,
501509
const Fortran::evaluate::Substring &y) {
502-
return std::visit(
510+
return Fortran::common::visit(
503511
[&](const auto &p, const auto &q) { return isEqual(p, q); },
504512
x.parent(), y.parent()) &&
505513
isEqual(x.lower(), y.lower()) && isEqual(x.lower(), y.lower());
@@ -529,7 +537,7 @@ class IsEqualEvaluateExpr {
529537
}
530538
static bool isEqual(const Fortran::evaluate::ProcedureDesignator &x,
531539
const Fortran::evaluate::ProcedureDesignator &y) {
532-
return std::visit(
540+
return Fortran::common::visit(
533541
[&](const auto &v, const auto &w) { return isEqual(v, w); }, x.u, y.u);
534542
}
535543
static bool isEqual(const Fortran::evaluate::ProcedureRef &x,
@@ -591,19 +599,19 @@ class IsEqualEvaluateExpr {
591599
template <typename A>
592600
static bool isEqual(const Fortran::evaluate::Expr<A> &x,
593601
const Fortran::evaluate::Expr<A> &y) {
594-
return std::visit(
602+
return Fortran::common::visit(
595603
[&](const auto &v, const auto &w) { return isEqual(v, w); }, x.u, y.u);
596604
}
597605
static bool
598606
isEqual(const Fortran::evaluate::Relational<Fortran::evaluate::SomeType> &x,
599607
const Fortran::evaluate::Relational<Fortran::evaluate::SomeType> &y) {
600-
return std::visit(
608+
return Fortran::common::visit(
601609
[&](const auto &v, const auto &w) { return isEqual(v, w); }, x.u, y.u);
602610
}
603611
template <typename A>
604612
static bool isEqual(const Fortran::evaluate::Designator<A> &x,
605613
const Fortran::evaluate::Designator<A> &y) {
606-
return std::visit(
614+
return Fortran::common::visit(
607615
[&](const auto &v, const auto &w) { return isEqual(v, w); }, x.u, y.u);
608616
}
609617
template <int BITS>

flang/include/flang/Optimizer/Support/Matcher.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#ifndef FORTRAN_OPTIMIZER_SUPPORT_MATCHER_H
1414
#define FORTRAN_OPTIMIZER_SUPPORT_MATCHER_H
1515

16+
#include "flang/Common/idioms.h"
1617
#include <variant>
1718

1819
// Boilerplate CRTP class for a simplified type-casing syntactic sugar. This
@@ -23,10 +24,10 @@ template<class... Ts> struct matches : Ts... { using Ts::operator()...; };
2324
template<class... Ts> matches(Ts...) -> matches<Ts...>;
2425
template<typename N> struct matcher {
2526
template<typename... Ts> auto match(Ts... ts) {
26-
return std::visit(matches{ts...}, static_cast<N*>(this)->matchee());
27+
return Fortran::common::visit(matches{ts...}, static_cast<N*>(this)->matchee());
2728
}
2829
template<typename... Ts> auto match(Ts... ts) const {
29-
return std::visit(matches{ts...}, static_cast<N const*>(this)->matchee());
30+
return Fortran::common::visit(matches{ts...}, static_cast<N const*>(this)->matchee());
3031
}
3132
};
3233
// clang-format on

flang/lib/Evaluate/intrinsics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2879,7 +2879,7 @@ static bool CheckForNonPositiveValues(FoldingContext &context,
28792879
if (arg.Rank() > 0) {
28802880
if (const Expr<SomeType> *expr{arg.UnwrapExpr()}) {
28812881
if (const auto *intExpr{std::get_if<Expr<SomeInteger>>(&expr->u)}) {
2882-
std::visit(
2882+
Fortran::common::visit(
28832883
[&](const auto &kindExpr) {
28842884
using IntType = typename std::decay_t<decltype(kindExpr)>::Result;
28852885
if (const auto *constArray{

flang/lib/Lower/Allocatable.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -349,10 +349,10 @@ class AllocateStmtHelper {
349349
void visitAllocateOptions() {
350350
for (const auto &allocOption :
351351
std::get<std::list<Fortran::parser::AllocOpt>>(stmt.t))
352-
std::visit(
352+
Fortran::common::visit(
353353
Fortran::common::visitors{
354354
[&](const Fortran::parser::StatOrErrmsg &statOrErr) {
355-
std::visit(
355+
Fortran::common::visit(
356356
Fortran::common::visitors{
357357
[&](const Fortran::parser::StatVariable &statVar) {
358358
statExpr = Fortran::semantics::GetExpr(statVar);
@@ -897,15 +897,16 @@ void Fortran::lower::genDeallocateStmt(
897897
const Fortran::lower::SomeExpr *errMsgExpr = nullptr;
898898
for (const Fortran::parser::StatOrErrmsg &statOrErr :
899899
std::get<std::list<Fortran::parser::StatOrErrmsg>>(stmt.t))
900-
std::visit(Fortran::common::visitors{
901-
[&](const Fortran::parser::StatVariable &statVar) {
902-
statExpr = Fortran::semantics::GetExpr(statVar);
903-
},
904-
[&](const Fortran::parser::MsgVariable &errMsgVar) {
905-
errMsgExpr = Fortran::semantics::GetExpr(errMsgVar);
906-
},
907-
},
908-
statOrErr.u);
900+
Fortran::common::visit(
901+
Fortran::common::visitors{
902+
[&](const Fortran::parser::StatVariable &statVar) {
903+
statExpr = Fortran::semantics::GetExpr(statVar);
904+
},
905+
[&](const Fortran::parser::MsgVariable &errMsgVar) {
906+
errMsgExpr = Fortran::semantics::GetExpr(errMsgVar);
907+
},
908+
},
909+
statOrErr.u);
909910
ErrorManager errorManager;
910911
errorManager.init(converter, loc, statExpr, errMsgExpr);
911912
fir::FirOpBuilder &builder = converter.getFirOpBuilder();

0 commit comments

Comments
 (0)