libexpat assumes the compiler might not know of the C99 format specifiers for ptrdiff_t and size_t, and tries to guess alternative format strings.
The following diff relieves it of this misery (but can't be sent upѕtream, as it is too aggressive). Index: lib/internal.h =================================================================== RCS file: /OpenBSD/src/lib/libexpat/lib/internal.h,v retrieving revision 1.10 diff -u -p -r1.10 internal.h --- lib/internal.h 20 Sep 2022 23:00:53 -0000 1.10 +++ lib/internal.h 18 Feb 2023 08:16:19 -0000 @@ -105,31 +105,9 @@ # endif #endif -#include <limits.h> // ULONG_MAX - -#if defined(_WIN32) \ - && (! defined(__USE_MINGW_ANSI_STDIO) \ - || (1 - __USE_MINGW_ANSI_STDIO - 1 == 0)) -# define EXPAT_FMT_ULL(midpart) "%" midpart "I64u" -# if defined(_WIN64) // Note: modifiers "td" and "zu" do not work for MinGW -# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "I64d" -# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "I64u" -# else -# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "d" -# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "u" -# endif -#else -# define EXPAT_FMT_ULL(midpart) "%" midpart "llu" -# if ! defined(ULONG_MAX) -# error Compiler did not define ULONG_MAX for us -# elif ULONG_MAX == 18446744073709551615u // 2^64-1 -# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "ld" -# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "lu" -# else -# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "d" -# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "u" -# endif -#endif +#define EXPAT_FMT_ULL(midpart) "%" midpart "llu" +#define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "td" +#define EXPAT_FMT_SIZE_T(midpart) "%" midpart "zu" #ifndef UNUSED_P # define UNUSED_P(p) (void)p