diff --git a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp index e5fd19d4622b6..8fefda59806c8 100644 --- a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp +++ b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp @@ -614,6 +614,11 @@ mlir::Value OpenACCMappableModel::generatePrivateInit( mlir::Type innerTy = fir::unwrapRefType(boxTy.getEleTy()); if (fir::isa_trivial(innerTy)) { retVal = getDeclareOpForType(unwrappedTy).getBase(); + mlir::Value allocatedScalar = + fir::AllocMemOp::create(builder, loc, innerTy); + mlir::Value firClass = + fir::EmboxOp::create(builder, loc, boxTy, allocatedScalar); + fir::StoreOp::create(builder, loc, firClass, retVal); } else if (mlir::isa(innerTy)) { hlfir::Entity source = hlfir::Entity{var}; auto [temp, cleanup] = hlfir::createTempFromMold(loc, firBuilder, source); diff --git a/flang/test/Lower/OpenACC/acc-private.f90 b/flang/test/Lower/OpenACC/acc-private.f90 index b1bfb02439f03..5ca08a39a1e1c 100644 --- a/flang/test/Lower/OpenACC/acc-private.f90 +++ b/flang/test/Lower/OpenACC/acc-private.f90 @@ -95,6 +95,9 @@ ! CHECK: ^bb0(%arg0: !fir.ref>>): ! CHECK: %[[ALLOCA:.*]] = fir.alloca !fir.box> ! CHECK: %[[DECLARE:.*]]:2 = hlfir.declare %[[ALLOCA]] {uniq_name = "acc.private.init"} : (!fir.ref>>) -> (!fir.ref>>, !fir.ref>>) +! CHECK: %[[ALLOCMEM:.*]] = fir.allocmem i32 +! CHECK: %[[BOX:.*]] = fir.embox %[[ALLOCMEM]] : (!fir.heap) -> !fir.box> +! CHECK: fir.store %[[BOX]] to %[[DECLARE]]#0 : !fir.ref>> ! CHECK: acc.yield %[[DECLARE]]#0 : !fir.ref>> ! CHECK: }