[flang-commits] [flang] d453af5 - [flang][NFC] Fix invalid op result access
Valentin Clement via flang-commits
flang-commits at lists.llvm.org
Mon Apr 10 12:19:49 PDT 2023
Author: Valentin Clement
Date: 2023-04-10T12:19:44-07:00
New Revision: d453af5675aa18734485ae72fdea506ad6da4118
URL: https://github.com/llvm/llvm-project/commit/d453af5675aa18734485ae72fdea506ad6da4118
DIFF: https://github.com/llvm/llvm-project/commit/d453af5675aa18734485ae72fdea506ad6da4118.diff
LOG: [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
Added:
Modified:
flang/lib/Lower/ConvertCall.cpp
flang/lib/Lower/ConvertExpr.cpp
Removed:
################################################################################
diff --git a/flang/lib/Lower/ConvertCall.cpp b/flang/lib/Lower/ConvertCall.cpp
index 9832f9665a864..39a8be38cb297 100644
--- a/flang/lib/Lower/ConvertCall.cpp
+++ b/flang/lib/Lower/ConvertCall.cpp
@@ -216,10 +216,12 @@ fir::ExtendedValue Fortran::lower::genCallOpAndResult(
auto *bldr = &converter.getFirOpBuilder();
auto stackSaveFn = fir::factory::getLlvmStackSave(builder);
auto stackSaveSymbol = bldr->getSymbolRefAttr(stackSaveFn.getName());
- mlir::Value sp = bldr->create<fir::CallOp>(
- loc, stackSaveFn.getFunctionType().getResults(),
- stackSaveSymbol, mlir::ValueRange{})
- .getResult(0);
+ mlir::Value sp;
+ fir::CallOp call = bldr->create<fir::CallOp>(
+ loc, stackSaveFn.getFunctionType().getResults(), stackSaveSymbol,
+ mlir::ValueRange{});
+ if (call.getNumResults() != 0)
+ sp = call.getResult(0);
stmtCtx.attachCleanup([bldr, loc, sp]() {
auto stackRestoreFn = fir::factory::getLlvmStackRestore(*bldr);
auto stackRestoreSymbol =
@@ -401,14 +403,16 @@ fir::ExtendedValue Fortran::lower::genCallOpAndResult(
loc, funcType.getResults(), builder.getStringAttr(procName),
passObject, operands, nullptr);
}
- callResult = dispatch.getResult(0);
callNumResults = dispatch.getNumResults();
+ if (callNumResults != 0)
+ callResult = dispatch.getResult(0);
} else {
// Standard procedure call with fir.call.
auto call = builder.create<fir::CallOp>(loc, funcType.getResults(),
funcSymbolAttr, operands);
- callResult = call.getResult(0);
callNumResults = call.getNumResults();
+ if (callNumResults != 0)
+ callResult = call.getResult(0);
}
if (caller.mustSaveResult()) {
diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp
index f6a6e7002feff..743f6a199f2e7 100644
--- a/flang/lib/Lower/ConvertExpr.cpp
+++ b/flang/lib/Lower/ConvertExpr.cpp
@@ -4276,7 +4276,9 @@ class ArrayExprLowering {
// Put the implicit loop variables in row to column order to match FIR's
// Ops. (The loops were constructed from outermost column to innermost
// row.)
- mlir::Value outerRes = loops[0].getResult(0);
+ mlir::Value outerRes;
+ if (loops[0].getNumResults() != 0)
+ outerRes = loops[0].getResult(0);
return {IterationSpace(innerArg, outerRes, llvm::reverse(ivars)),
afterLoopNest};
}
More information about the flang-commits
mailing list