diff --git a/flang/lib/Lower/ConvertVariable.cpp b/flang/lib/Lower/ConvertVariable.cpp index ccfde16ce2c32..da964c956dbd0 100644 --- a/flang/lib/Lower/ConvertVariable.cpp +++ b/flang/lib/Lower/ConvertVariable.cpp @@ -2439,6 +2439,11 @@ void Fortran::lower::mapSymbolAttributes( // Compute array extents and lower bounds. if (ba.isArray()) { + // Handle unused entry dummy arrays with BaseBoxType before processing shape + if (isUnusedEntryDummy && + llvm::isa(converter.genType(var))) + if (genUnusedEntryPointBox()) + return; if (ba.isStaticArray()) { if (ba.lboundIsAllOnes()) { for (std::int64_t extent : diff --git a/flang/test/Lower/box-address.f90 b/flang/test/Lower/box-address.f90 new file mode 100644 index 0000000000000..04f14188a7bec --- /dev/null +++ b/flang/test/Lower/box-address.f90 @@ -0,0 +1,34 @@ +! RUN: flang -fc1 -emit-hlfir %s -o - | FileCheck %s + +module m3 + type x1 + integer::ix1 + end type x1 + type,extends(x1)::x2 + end type x2 + type,extends(x2)::x3 + end type x3 + class(x1),pointer,dimension(:)::cy1 +contains + subroutine dummy() + entry chk(c1) + class(x1),dimension(3)::c1 + end subroutine dummy +end module m3 +! CHECK-LABEL: func.func @_QMm3Pchk( +! CHECK-SAME: %[[ARG0:.*]]: !fir.class>> {fir.bindc_name = "c1"}) { +! CHECK: %[[DUMMY_SCOPE:.*]] = fir.dummy_scope : !fir.dscope +! CHECK: %[[DECLARE:.*]]:2 = hlfir.declare %[[ARG0]] dummy_scope %[[DUMMY_SCOPE]] {uniq_name = "_QMm3FdummyEc1"} : (!fir.class>>, !fir.dscope) -> (!fir.class>>, !fir.class>>) + +subroutine s1 + use m3 + type(x1),target::ty1(3) + ty1%ix1=[1,2,3] + cy1=>ty1 + call chk(cy1) +end subroutine s1 + +program main + call s1 + print *,'pass' +end program main