https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81296
--- Comment #3 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- OK, with the alternate form of the format (aka format statement) the frontend is not building the correct calls to the user defined procedure. { struct __st_parameter_dt dt_parm.9; dt_parm.9.common.filename = &"pr81296.f03"[1]{lb: 1 sz: 1}; dt_parm.9.common.line = 56; dt_parm.9.format = &"( DT (20,3) )"[1]{lb: 1 sz: 1}; dt_parm.9.format_len = 13; dt_parm.9.common.flags = 67112960; dt_parm.9.common.unit = 6; _gfortran_st_write (&dt_parm.9); { struct __class_dtio_01_module_Person_t class.10; class.10._vptr = (struct __vtype_dtio_01_module_Person * {ref-all}) &__vtab_dtio_01_module_Person; class.10._data = &person_01; _gfortran_transfer_derived (&dt_parm.9, &class.10, pwf); } _gfortran_st_write_done (&dt_parm.9); } { struct __st_parameter_dt dt_parm.11; dt_parm.11.common.filename = &"pr81296.f03"[1]{lb: 1 sz: 1}; dt_parm.11.common.line = 58; dt_parm.11.format = &"( DT(15,3) )"[1]{lb: 1 sz: 1}; dt_parm.11.format_len = 12; dt_parm.11.common.flags = 4096; dt_parm.11.common.unit = 6; _gfortran_st_write (&dt_parm.11); { struct person * D.3598; D.3598 = &person_01; _gfortran_transfer_character_write (&dt_parm.11, &D.3598->name, 40); _gfortran_transfer_integer_write (&dt_parm.11, &D.3598->age, 4); } _gfortran_st_write_done (&dt_parm.11); }