! RUN: %python %S/test_errors.py %s %flang_fc1 module m1 type, abstract :: ta1 contains procedure(ta1p1), deferred :: ta1p1 generic :: gen => ta1p1 end type abstract interface subroutine ta1p1(x) import ta1 class(ta1), intent(in) :: x end end interface type :: tb1 contains procedure tb1p1 generic :: gen => tb1p1 end type type :: tc1 contains procedure tc1p1 generic, private :: gen => tc1p1 end type type :: td1 contains procedure, nopass :: td1p1 generic :: gen => td1p1 end type contains subroutine tb1p1(x) class(tb1), intent(in) :: x end subroutine tb1p2(x) class(tb1), intent(in) :: x end subroutine tc1p1(x) class(tc1), intent(in) :: x end subroutine td1p1 end end module m2 use m1 type, extends(ta1) :: ta2a contains procedure :: ta1p1 => ta2ap1 ! ok end type type, extends(ta1) :: ta2b contains procedure :: ta1p1 => ta2bp1 generic :: gen => ta1p1 ! ok, overidden deferred end type type, extends(tb1) :: tb2a contains generic :: gen => tb1p1 ! ok, same binding end type type, extends(tb1) :: tb2b contains procedure :: tb1p1 => tb2bp2 generic :: gen => tb1p1 ! ok, overridden end type type, extends(tb1) :: tb2c contains procedure tb2cp1 !ERROR: Generic 'gen' may not have specific procedures 'tb1p1' and 'tb2cp1' as their interfaces are not distinguishable generic :: gen => tb2cp1 end type type, extends(tc1) :: tc2 contains procedure tc2p1 !ERROR: 'gen' does not have the same accessibility as its previous declaration generic :: gen => tc2p1 end type type, extends(td1) :: td2 contains procedure, nopass :: td2p1 => td1p1 generic :: gen => td2p1 ! ok, same procedure end type contains subroutine ta2ap1(x) class(ta2a), intent(in) :: x end subroutine ta2bp1(x) class(ta2b), intent(in) :: x end subroutine tb2bp2(x) class(tb2b), intent(in) :: x end subroutine tb2cp1(x) class(tb2c), intent(in) :: x end subroutine tc2p1(x) class(tc2), intent(in) :: x end end