Fortran: follow-up fix to checking of renamed-on-use interface name [PR120784]

Commit r16-1633 introduced a regression for imported interfaces that were
not renamed-on-use, since the related logic did not take into account that
the absence of renaming could be represented by an empty string.

	PR fortran/120784

gcc/fortran/ChangeLog:

	* interface.cc (gfc_match_end_interface): Detect empty local_name.

gcc/testsuite/ChangeLog:

	* gfortran.dg/interface_63.f90: Extend testcase.
This commit is contained in:
Harald Anlauf 2025-06-27 23:00:48 +02:00
parent 1f4a917c61
commit ddff83b3dd
2 changed files with 38 additions and 1 deletions

View File

@ -457,7 +457,9 @@ gfc_match_end_interface (void)
if (current_interface.sym->attr.use_assoc
&& current_interface.sym->attr.use_rename
&& current_interface.sym->ns->use_stmts->rename)
&& current_interface.sym->ns->use_stmts->rename
&& (current_interface.sym->ns->use_stmts->rename->local_name[0]
!= '\0'))
local_name = current_interface.sym->ns->use_stmts->rename->local_name;
if (type != current_interface.type

View File

@ -60,3 +60,38 @@ program p
call myget (i)
call myget (r)
end
! Check that we do not regress on the following:
module mod1
implicit none
interface local
module procedure local_data
end interface local
contains
logical function local_data (data) result (local)
real, intent(in) :: data
local = .true.
end function local_data
end module mod1
module mod2
use mod1, only: local
implicit none
interface local
module procedure local_invt
end interface local
contains
logical function local_invt (invt) result (local)
integer, intent(in) :: invt
local = .true.
end function local_invt
end module mod2