diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp index 809fd3b3be7cfd..6a53e6673bfdc9 100644 --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -722,7 +722,7 @@ mlir::Type getTypeFromBounds(llvm::SmallVector &bounds, if (shape.empty() || shape.size() != bounds.size()) return ty; auto newSeqTy = fir::SequenceType::get(shape, seqTy.getEleTy()); - if (mlir::isa(ty)) + if (mlir::isa(ty)) return fir::ReferenceType::get(newSeqTy); return newSeqTy; } diff --git a/flang/test/Lower/OpenACC/acc-private.f90 b/flang/test/Lower/OpenACC/acc-private.f90 index 80b474b348c1c2..7ec8e345fd3af3 100644 --- a/flang/test/Lower/OpenACC/acc-private.f90 +++ b/flang/test/Lower/OpenACC/acc-private.f90 @@ -3,6 +3,15 @@ ! RUN: bbc -fopenacc -emit-fir %s -o - | FileCheck %s --check-prefixes=CHECK,FIR ! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK,HLFIR +! CHECK-LABEL: acc.private.recipe @privatization_ref_10xf32 : !fir.ref> init { +! HLFIR: ^bb0(%[[ARG0:.*]]: !fir.ref>): +! HLFIR: %[[C10:.*]] = arith.constant 10 : index +! HLFIR: %[[SHAPE:.*]] = fir.shape %[[C10]] : (index) -> !fir.shape<1> +! HLFIR: %[[ALLOCA:.*]] = fir.alloca !fir.array<10xf32> +! HLFIR: %[[DECLARE:.*]]:2 = hlfir.declare %[[ALLOCA]](%[[SHAPE]]) {uniq_name = "acc.private.init"} : (!fir.ref>, !fir.shape<1>) -> (!fir.ref>, !fir.ref>) +! HLFIR: acc.yield %[[DECLARE]]#0 : !fir.ref> +! CHECK: } + ! CHECK-LABEL: acc.firstprivate.recipe @firstprivatization_ref_UxUx2xi32 : !fir.ref> init { ! CHECK: ^bb0(%[[ARG0:.*]]: !fir.ref>, %[[ARG1:.*]]: index, %[[ARG2:.*]]: index, %[[ARG3:.*]]: index): ! HLFIR: %[[SHAPE:.*]] = fir.shape %[[ARG1]], %[[ARG2]], %[[ARG3]] : (index, index, index) -> !fir.shape<3> @@ -363,3 +372,17 @@ subroutine acc_firstprivate_dynamic_extent(a, n) end subroutine ! CHECK: acc.parallel firstprivate(@firstprivatization_ref_UxUx2xi32 -> %{{.*}} : !fir.ref>) + +module acc_declare_equivalent + integer, parameter :: n = 10 + real :: v1(n) + real :: v2(n) + equivalence(v1(1), v2(1)) +contains + subroutine sub1() + !$acc parallel private(v2) + !$acc end parallel + end subroutine +end module + +! CHECK: acc.parallel private(@privatization_ref_10xf32 -> %{{.*}} : !fir.ref>)