diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp --- a/flang/lib/Lower/ConvertExpr.cpp +++ b/flang/lib/Lower/ConvertExpr.cpp @@ -1844,7 +1844,8 @@ const Fortran::evaluate::Symbol *assumedTypeSym = arg.value()->GetAssumedTypeDummy(); auto symBox = symMap.lookupSymbol(*assumedTypeSym); - operands.emplace_back(symBox.getAddr()); + operands.emplace_back( + converter.getSymbolExtendedValue(*assumedTypeSym, &symMap)); continue; } if (!expr) { diff --git a/flang/test/Lower/assumed-type.f90 b/flang/test/Lower/assumed-type.f90 --- a/flang/test/Lower/assumed-type.f90 +++ b/flang/test/Lower/assumed-type.f90 @@ -48,4 +48,14 @@ ! CHECK-SAME: %[[ARG0:.*]]: !fir.box> {fir.bindc_name = "a", fir.optional}) { ! CHECK: %{{.*}} = fir.is_present %[[ARG0]] : (!fir.box>) -> i1 + subroutine assumed_type_lbound(a) + type(*), optional :: a(:,:) + print*,lbound(a,dim=1) + end subroutine + +! CHECK-LABEL: func.func @_QMassumed_type_testPassumed_type_lbound( +! CHECK-SAME: %[[ARG0:.*]]: !fir.box> {fir.bindc_name = "a", fir.optional}) { +! CHECK: %[[C1:.*]] = arith.constant 1 : i32 +! CHECK: %{{.*}} = fir.call @_FortranAioOutputInteger32(%{{.*}}, %[[C1]]) {{.*}} : (!fir.ref, i32) -> i1 + end module