! { dg-do compile } ! { dg-options "-std=legacy" } ! ! PR23843 ! Make sure derived type I/O with PRIVATE components works where it's allowed module m1 type t1 integer i end type t1 end module m1 module m2 use m1 type t2 private type (t1) t end type t2 type t3 private integer i end type t3 contains subroutine test character*20 c type(t2) :: a type(t3) :: b a % t % i = 31337 b % i = 255 write(c,*) a if (trim(adjustl(c)) /= "31337") call abort write(c,*) b if (trim(adjustl(c)) /= "255") call abort end subroutine test end module m2 use m2 call test end ! { dg-final { cleanup-modules "m1 m2" } }