@@ -1900,9 +1900,11 @@ class ArrayExprLowering {
1900
1900
auto [iterSpace, insPt] = genIterSpace ();
1901
1901
auto exv = f (iterSpace);
1902
1902
auto innerArg = iterSpace.innerArgument ();
1903
+ // Convert to array elemental type is needed for logical.
1904
+ auto eleTy = innerArg.getType ().cast <fir::SequenceType>().getEleTy ();
1905
+ auto element = builder.createConvert (loc, eleTy, fir::getBase (exv));
1903
1906
auto upd = builder.create <fir::ArrayUpdateOp>(
1904
- loc, innerArg.getType (), innerArg, fir::getBase (exv),
1905
- iterSpace.iterVec ());
1907
+ loc, innerArg.getType (), innerArg, element, iterSpace.iterVec ());
1906
1908
builder.create <fir::ResultOp>(loc, upd.getResult ());
1907
1909
builder.restoreInsertionPoint (insPt);
1908
1910
return fir::substBase (exv, iterSpace.outerResult ());
@@ -2693,8 +2695,8 @@ class ArrayExprLowering {
2693
2695
auto lf = genarr (x.left ());
2694
2696
auto rf = genarr (x.right ());
2695
2697
return [=](IterSpace iters) -> ExtValue {
2696
- auto lhs = fir::getBase ( lf (iters) );
2697
- auto rhs = fir::getBase ( rf (iters) );
2698
+ auto lhs = lf (iters);
2699
+ auto rhs = rf (iters);
2698
2700
return Fortran::lower::genCharCompare (builder, loc, pred, lhs, rhs);
2699
2701
};
2700
2702
}
0 commit comments