@@ -547,49 +547,35 @@ class IsEqualEvaluateExpr {
547
547
template <typename A>
548
548
static bool isEqual (const Fortran::evaluate::ImpliedDo<A> &x,
549
549
const Fortran::evaluate::ImpliedDo<A> &y) {
550
- using Expr = Fortran::evaluate::Expr<A>;
551
- for (const auto &[xValue, yValue] : llvm::zip (x.values (), y.values ())) {
552
- bool checkValue = Fortran::common::visit (
553
- common::visitors{
554
- [&](const Expr &v, const Expr &w) { return isEqual (v, w); },
555
- [&](const auto &, const auto &) {
556
- llvm::report_fatal_error (" isEqual is not handled yet for "
557
- " the element type in ImpliedDo" );
558
- return false ;
559
- },
560
- },
561
- xValue.u , yValue.u );
562
- if (!checkValue) {
563
- return false ;
564
- }
565
- }
566
- return isEqual (x.lower (), y.lower ()) && isEqual (x.upper (), y.upper ()) &&
567
- isEqual (x.stride (), y.stride ());
550
+ return isEqual (x.values (), y.values ()) && isEqual (x.lower (), y.lower ()) &&
551
+ isEqual (x.upper (), y.upper ()) && isEqual (x.stride (), y.stride ());
568
552
}
569
553
template <typename A>
570
- static bool isEqual (const Fortran::evaluate::ArrayConstructor<A> &x,
571
- const Fortran::evaluate::ArrayConstructor<A> &y) {
554
+ static bool isEqual (const Fortran::evaluate::ArrayConstructorValue<A> &x,
555
+ const Fortran::evaluate::ArrayConstructorValue<A> &y) {
556
+ using Expr = Fortran::evaluate::Expr<A>;
557
+ using ImpliedDo = Fortran::evaluate::ImpliedDo<A>;
572
558
for (const auto &[xValue, yValue] : llvm::zip (x, y)) {
573
- using Expr = Fortran::evaluate::Expr<A>;
574
- using ImpliedDo = Fortran::evaluate::ImpliedDo<A>;
575
559
bool checkElement = Fortran::common::visit (
576
560
common::visitors{
577
561
[&](const Expr &v, const Expr &w) { return isEqual (v, w); },
578
562
[&](const ImpliedDo &v, const ImpliedDo &w) {
579
563
return isEqual (v, w);
580
564
},
581
- [&](const auto &, const auto &) {
582
- llvm::report_fatal_error (" isEqual is not handled yet for "
583
- " the element type in ImpliedDo" );
584
- return false ;
585
- },
565
+ [&](const Expr &, const ImpliedDo &) { return false ; },
566
+ [&](const ImpliedDo &, const Expr &) { return false ; },
586
567
},
587
568
xValue.u , yValue.u );
588
569
if (!checkElement) {
589
570
return false ;
590
571
}
591
572
}
592
- return x.GetType () == y.GetType ();
573
+ return true ;
574
+ }
575
+ template <typename A>
576
+ static bool isEqual (const Fortran::evaluate::ArrayConstructor<A> &x,
577
+ const Fortran::evaluate::ArrayConstructor<A> &y) {
578
+ return isEqual (x, y) && x.GetType () == y.GetType ();
593
579
}
594
580
static bool isEqual (const Fortran::evaluate::ImpliedDoIndex &x,
595
581
const Fortran::evaluate::ImpliedDoIndex &y) {
0 commit comments