https://gcc.gnu.org/g:e6f4543f63366433493b3870845b555fd00be7e6
commit r16-3178-ge6f4543f63366433493b3870845b555fd00be7e6 Author: Paul Thomas <pa...@gcc.gnu.org> Date: Wed Aug 13 07:16:31 2025 +0100 Fortran: Use associated TBP subroutine not found [PR89092] 2025-08-13 Paul Thomas <pa...@gcc.gnu.org> gcc/fortran PR fortran/89092 * resolve.cc (was_declared): Add subroutine attribute. gcc/testsuite/ PR fortran/89092 * gfortran.dg/pr89092.f90: New test. Diff: --- gcc/fortran/resolve.cc | 2 +- gcc/testsuite/gfortran.dg/pr89092.f90 | 49 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 68aaee846873..6b01b8f7c209 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -1630,7 +1630,7 @@ was_declared (gfc_symbol *sym) if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic || a.optional || a.pointer || a.save || a.target || a.volatile_ || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN - || a.asynchronous || a.codimension) + || a.asynchronous || a.codimension || a.subroutine) return 1; return 0; diff --git a/gcc/testsuite/gfortran.dg/pr89092.f90 b/gcc/testsuite/gfortran.dg/pr89092.f90 new file mode 100644 index 000000000000..21649940657c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr89092.f90 @@ -0,0 +1,49 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +module AModule + implicit none + private + public Foo + + interface Foo + module procedure FooPrivate + end interface +contains + subroutine FooPrivate(x) + integer :: x + + write(*,*) 'Foo(integer)' + end subroutine +end module +module BModule + implicit none + private + + type, public :: BType + contains + procedure :: Foo + end type +contains + subroutine Foo(self) + class(BType) :: self + + write(*,*) 'Foo(BType)' + end subroutine +end module +program iface_tbp_test + use AModule + implicit none + + call test() + +contains + subroutine test() + use BModule + + type(BType) :: y + + call y%Foo() + call Foo(1) + end subroutine +end program +! { dg-final { scan-tree-dump-times "foo \\(&class.2\\)" 1 "original" } }