diff --git a/flang/lib/Lower/ConvertCall.cpp b/flang/lib/Lower/ConvertCall.cpp index 46fc480bb1b5f..626d9ef0f706e 100644 --- a/flang/lib/Lower/ConvertCall.cpp +++ b/flang/lib/Lower/ConvertCall.cpp @@ -583,7 +583,11 @@ struct CallContext { fir::FirOpBuilder &getBuilder() { return converter.getFirOpBuilder(); } - std::string getProcedureName() const { return procRef.proc().GetName(); } + std::string getProcedureName() const { + if (const Fortran::semantics::Symbol *sym = procRef.proc().GetSymbol()) + return sym->GetUltimate().name().ToString(); + return procRef.proc().GetName(); + } /// Is this a call to an elemental procedure with at least one array argument? bool isElementalProcWithArrayArgs() const { diff --git a/flang/test/Lower/HLFIR/intrinsic-module-procedures.f90 b/flang/test/Lower/HLFIR/intrinsic-module-procedures.f90 index e7d8536871e55..6406d00bebb59 100644 --- a/flang/test/Lower/HLFIR/intrinsic-module-procedures.f90 +++ b/flang/test/Lower/HLFIR/intrinsic-module-procedures.f90 @@ -21,3 +21,14 @@ subroutine foo(cptr, x) ! CHECK: %[[VAL_8:.*]] = fir.box_addr %[[VAL_4]] : (!fir.box) -> !fir.ref ! CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (!fir.ref) -> i64 ! CHECK: fir.store %[[VAL_9]] to %[[VAL_7]] : !fir.ref + +subroutine test_renaming(p) + use iso_c_binding, only: c_associated_alias => c_associated, c_ptr + type(c_ptr) p + print *, c_associated_alias(p) +end subroutine + +! CHECK-LABEL: func.func @_QPtest_renaming +! CHECK: %[[C_PTR_TARG:.*]] = fir.load %{{.*}} : !fir.ref +! CHECK: %[[NULL:.*]] = arith.constant 0 : i64 +! CHECK: arith.cmpi ne, %[[C_PTR_TARG]], %[[NULL]] : i64