! { dg-do compile }
! Test the fix for PR43266, in which an ICE followed correct error messages.
!
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
! Reported in http://groups.google.ca/group/comp.lang.fortran/browse_thread/thread/f5ec99089ea72b79
!
!----------------
! library code

module m
TYPE, ABSTRACT :: top
CONTAINS
   PROCEDURE(xxx), DEFERRED :: proc_a ! { dg-error "must be explicit" }
   ! some useful default behavior
   PROCEDURE :: proc_c => top_c ! { dg-error "must be a module procedure" }
END TYPE top

! Concrete middle class with useful behavior
TYPE, EXTENDS(top) :: middle
CONTAINS
   ! do nothing, empty proc just to make middle concrete
   PROCEDURE :: proc_a => dummy_middle_a ! { dg-error "must be a module procedure" }
   ! some useful default behavior
   PROCEDURE :: proc_b => middle_b ! { dg-error "must be a module procedure" }
END TYPE middle

!----------------
! client code

TYPE, EXTENDS(middle) :: bottom
CONTAINS
   ! useful proc to satisfy deferred procedure in top. Because we've
   ! extended middle we wouldn't get told off if we forgot this.
   PROCEDURE :: proc_a => bottom_a  ! { dg-error "must be a module procedure" }
   ! calls middle%proc_b and then provides extra behavior
   PROCEDURE :: proc_b => bottom_b
   ! calls top_c and then provides extra behavior
   PROCEDURE :: proc_c => bottom_c
END TYPE bottom
contains
SUBROUTINE bottom_b(obj)
   CLASS(Bottom) :: obj
   CALL obj%middle%proc_b ! { dg-error "should be a SUBROUTINE" }
   ! other stuff
END SUBROUTINE bottom_b

SUBROUTINE bottom_c(obj)
   CLASS(Bottom) :: obj
   CALL top_c(obj) ! { dg-error "Explicit interface required" }
   ! other stuff
END SUBROUTINE bottom_c 
end module
