Skip to content

Commit 491e6f1

Browse files
authored
Merge pull request #684 from flang-compiler/fix-683
Fix character array compare
2 parents 43fd8ef + bf27dce commit 491e6f1

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

flang/lib/Lower/ConvertExpr.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1900,9 +1900,11 @@ class ArrayExprLowering {
19001900
auto [iterSpace, insPt] = genIterSpace();
19011901
auto exv = f(iterSpace);
19021902
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));
19031906
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());
19061908
builder.create<fir::ResultOp>(loc, upd.getResult());
19071909
builder.restoreInsertionPoint(insPt);
19081910
return fir::substBase(exv, iterSpace.outerResult());
@@ -2693,8 +2695,8 @@ class ArrayExprLowering {
26932695
auto lf = genarr(x.left());
26942696
auto rf = genarr(x.right());
26952697
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);
26982700
return Fortran::lower::genCharCompare(builder, loc, pred, lhs, rhs);
26992701
};
27002702
}

0 commit comments

Comments
 (0)