! { dg-do compile } ! PR 23843 ! IO of derived types with private components is allowed in the module itself, ! but not elsewhere module gfortran2 type :: tp1 private integer :: i end type tp1 type :: tp1b integer :: i end type tp1b type :: tp2 real :: a type(tp1) :: t end type tp2 contains subroutine test() type(tp1) :: x type(tp2) :: y write (*, *) x write (*, *) y end subroutine test end module gfortran2 program prog use gfortran2 implicit none type :: tp3 type(tp2) :: t end type tp3 type :: tp3b type(tp1b) :: t end type tp3b type(tp1) :: x type(tp2) :: y type(tp3) :: z type(tp3b) :: zb write (*, *) x ! { dg-error "PRIVATE components" } write (*, *) y ! { dg-error "PRIVATE components" } write (*, *) z ! { dg-error "PRIVATE components" } write (*, *) zb end program prog