This patch is simple and obvious. Regression tested on x86_64-pc-linux-gnu.
Test case attached. (Changelog for test case will be included) I will commit tomorrow. Regards, Jerry 2019-02-23 Jerry DeLisle <jvdeli...@gcc.gnu.org> PR fortran/84387 * trans-io.c (transfer_expr): Do not return if there are no components to the derived type or class. diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 9a13af4a630..9e7071dc121 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -2407,8 +2407,6 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr, case_bt_struct: case BT_CLASS: - if (ts->u.derived->components == NULL) - return; if (gfc_bt_struct (ts->type) || ts->type == BT_CLASS) { gfc_symbol *derived;
! { dg-do run } ! PR84387 Defined output does not work for a derived type that ! has no components module m type :: t private !integer :: m_i = 0 !<-- *** contains private procedure, pass(this) :: write_t generic, public :: write(formatted) => write_t end type contains subroutine write_t(this, lun, iotype, vlist, istat, imsg) ! argument definitions class(t), intent(in) :: this integer, intent(in) :: lun character(len=*), intent(in) :: iotype integer, intent(in) :: vlist(:) integer, intent(out) :: istat character(len=*), intent(inout) :: imsg write(lun, fmt=*, iostat=istat, iomsg=imsg) "Hello World!" return end subroutine write_t end module program p use m, only : t type(t) :: foo print "(dt)", foo ! { dg-output " Hello World!" } end program