From: Valentin Clement Date: Mon, 10 Apr 2023 19:19:26 +0000 (-0700) Subject: [flang][NFC] Fix invalid op result access X-Git-Tag: upstream/17.0.6~12149 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d453af5675aa18734485ae72fdea506ad6da4118;p=platform%2Fupstream%2Fllvm.git [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 --- diff --git a/flang/lib/Lower/ConvertCall.cpp b/flang/lib/Lower/ConvertCall.cpp index 9832f96..39a8be3 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( - loc, stackSaveFn.getFunctionType().getResults(), - stackSaveSymbol, mlir::ValueRange{}) - .getResult(0); + mlir::Value sp; + fir::CallOp call = bldr->create( + 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(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 f6a6e70..743f6a1 100644 --- a/flang/lib/Lower/ConvertExpr.cpp +++ b/flang/lib/Lower/ConvertExpr.cpp @@ -4276,7 +4276,9 @@ private: // 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}; }