[flang-commits] [flang] [flang] fix early free of allocatable function result in WHERE mask (PR #178691)
Slava Zakharin via flang-commits
flang-commits at lists.llvm.org
Thu Jan 29 08:23:51 PST 2026
================
@@ -1973,17 +1983,25 @@ genUserCall(Fortran::lower::PreparedActualArguments &loweredActuals,
if (!resultIsFinalized) {
hlfir::Entity resultEntity = extendedValueToHlfirEntity(
loc, builder, result, tempResultName, /*insertBefore=*/callOp);
+ // Allocatable result must be freed, other results are stack allocated.
+ const auto *allocatable = result.getBoxOf<fir::MutableBoxValue>();
+ bool mustFree = allocatable != nullptr;
resultEntity = loadTrivialScalar(loc, builder, resultEntity);
if (resultEntity.isVariable()) {
// If the result has no finalization, it can be moved into an expression.
- // In such case, the expression should not be freed after its use since
- // the result is stack allocated or deallocation (for allocatable results)
- // was already inserted in genCallOpAndResult.
- auto asExpr =
- hlfir::AsExprOp::create(builder, loc, resultEntity,
- /*mustFree=*/builder.createBool(loc, false));
- return hlfir::EntityWithAttributes{asExpr.getResult()};
+ // In such case, the expression.
----------------
vzakhari wrote:
Comment is cut short.
https://github.com/llvm/llvm-project/pull/178691
More information about the flang-commits
mailing list