https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78501
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #7) > case FMT_LEN_z: > dirtype = sign ? signed_type_for (size_type_node) : size_type_node; > break; > > case FMT_LEN_t: > dirtype = sign ? ptrdiff_type_node : unsigned_type_for > (ptrdiff_type_node); > break; Or maybe even better: dirtype = signed_or_unsigned_type_for (!sign, size_type_node); and dirtype = igned_or_unsigned_type_for (!sign, ptrdiff_type_node); sizeof (size_t) == sizeof (ptrdiff_t) can't be assumed. E.g. vms uses always 32-bit size_t, but either 32-bit or 64-bit ptrdiff_t.