2025-08-13 Paul Thomas <pault@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.
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;
--- /dev/null
+! { 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" } }