65 lines
1.9 KiB
Fortran
65 lines
1.9 KiB
Fortran
! { dg-do compile }
|
|
!
|
|
! PR 43696: [OOP] Bogus error: Passed-object dummy argument must not be POINTER
|
|
!
|
|
! Contributed by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de>
|
|
|
|
|
|
MODULE error_stack_module
|
|
implicit none
|
|
|
|
type,abstract::serializable_class
|
|
contains
|
|
procedure(ser_DTV_RF),deferred::read_formatted
|
|
end type serializable_class
|
|
|
|
abstract interface
|
|
subroutine ser_DTV_RF(dtv,unit,iotype,v_list,iostat,iomsg)
|
|
import serializable_class
|
|
CLASS(serializable_class),INTENT(INOUT) :: dtv
|
|
INTEGER, INTENT(IN) :: unit
|
|
CHARACTER (LEN=*), INTENT(IN) :: iotype
|
|
INTEGER, INTENT(IN) :: v_list(:)
|
|
INTEGER, INTENT(OUT) :: iostat
|
|
CHARACTER (LEN=*), INTENT(INOUT) :: iomsg
|
|
end subroutine ser_DTV_RF
|
|
end interface
|
|
|
|
type,extends(serializable_class)::error_type
|
|
class(error_type),pointer::next=>null()
|
|
contains
|
|
procedure::read_formatted=>error_read_formatted
|
|
end type error_type
|
|
|
|
contains
|
|
|
|
recursive subroutine error_read_formatted(dtv,unit,iotype,v_list,iostat,iomsg)
|
|
CLASS(error_type),INTENT(INOUT) :: dtv
|
|
INTEGER, INTENT(IN) :: unit
|
|
CHARACTER (LEN=*), INTENT(IN) :: iotype
|
|
INTEGER, INTENT(IN) :: v_list(:)
|
|
INTEGER, INTENT(OUT) :: iostat
|
|
CHARACTER (LEN=*), INTENT(INOUT) :: iomsg
|
|
character(8),allocatable::type
|
|
character(8),allocatable::next
|
|
call basic_read_string(unit,type)
|
|
call basic_read_string(unit,next)
|
|
if(next=="NEXT")then
|
|
allocate(dtv%next)
|
|
call dtv%next%read_formatted(unit,iotype,v_list,iostat,iomsg)
|
|
end if
|
|
end subroutine error_read_formatted
|
|
|
|
end MODULE error_stack_module
|
|
|
|
|
|
module b_module
|
|
implicit none
|
|
type::b_type
|
|
class(not_yet_defined_type_type),pointer::b_component ! { dg-error "is a type that has not been declared" }
|
|
end type b_type
|
|
end module b_module
|
|
|
|
|
|
! { dg-final { cleanup-modules "error_stack_module b_module" } }
|