Skip to content

Commit d453af5

Browse files
committed
[flang][NFC] Fix invalid op result access
Fix invalid op result access. This will trigger assertion introduced in D147883. Reviewed By: frgossen Differential Revision: https://reviews.llvm.org/D147959
1 parent 03289dc commit d453af5

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

flang/lib/Lower/ConvertCall.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,12 @@ fir::ExtendedValue Fortran::lower::genCallOpAndResult(
216216
auto *bldr = &converter.getFirOpBuilder();
217217
auto stackSaveFn = fir::factory::getLlvmStackSave(builder);
218218
auto stackSaveSymbol = bldr->getSymbolRefAttr(stackSaveFn.getName());
219-
mlir::Value sp = bldr->create<fir::CallOp>(
220-
loc, stackSaveFn.getFunctionType().getResults(),
221-
stackSaveSymbol, mlir::ValueRange{})
222-
.getResult(0);
219+
mlir::Value sp;
220+
fir::CallOp call = bldr->create<fir::CallOp>(
221+
loc, stackSaveFn.getFunctionType().getResults(), stackSaveSymbol,
222+
mlir::ValueRange{});
223+
if (call.getNumResults() != 0)
224+
sp = call.getResult(0);
223225
stmtCtx.attachCleanup([bldr, loc, sp]() {
224226
auto stackRestoreFn = fir::factory::getLlvmStackRestore(*bldr);
225227
auto stackRestoreSymbol =
@@ -401,14 +403,16 @@ fir::ExtendedValue Fortran::lower::genCallOpAndResult(
401403
loc, funcType.getResults(), builder.getStringAttr(procName),
402404
passObject, operands, nullptr);
403405
}
404-
callResult = dispatch.getResult(0);
405406
callNumResults = dispatch.getNumResults();
407+
if (callNumResults != 0)
408+
callResult = dispatch.getResult(0);
406409
} else {
407410
// Standard procedure call with fir.call.
408411
auto call = builder.create<fir::CallOp>(loc, funcType.getResults(),
409412
funcSymbolAttr, operands);
410-
callResult = call.getResult(0);
411413
callNumResults = call.getNumResults();
414+
if (callNumResults != 0)
415+
callResult = call.getResult(0);
412416
}
413417

414418
if (caller.mustSaveResult()) {

flang/lib/Lower/ConvertExpr.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4276,7 +4276,9 @@ class ArrayExprLowering {
42764276
// Put the implicit loop variables in row to column order to match FIR's
42774277
// Ops. (The loops were constructed from outermost column to innermost
42784278
// row.)
4279-
mlir::Value outerRes = loops[0].getResult(0);
4279+
mlir::Value outerRes;
4280+
if (loops[0].getNumResults() != 0)
4281+
outerRes = loops[0].getResult(0);
42804282
return {IterationSpace(innerArg, outerRes, llvm::reverse(ivars)),
42814283
afterLoopNest};
42824284
}

0 commit comments

Comments
 (0)