Split out of #1 (found while fixing it, 2026-07-14). Pre-existing, NOT created by the #1 fix.
On the wasm32 port, clang's __SIZE_TYPE__ is unsigned long (so size_t from the compiler's stddef.h is unsigned long), but:
SIZE_MAXin<stdint.h>is still typedunsigned int(__WORDSIZE32_SIZE_ULONGis 0 for the port — it inheritssysdeps/wordsize-32/bits/wordsize.h, now overridden bysysdeps/wasm32/bits/wordsize.hfrom the #1 fix, which deliberately left this knob at 0), soSIZE_MAXis not type-identical tosize_t.ssize_tis__SWORD_TYPE == int, mismatching%zdand-Werror=formatusers, andSSIZE_MAX's type would drift fromssize_tif__WORDSIZE32_SIZE_ULONGwere naively flipped.
Doing it right (per the #1 investigation): flip __WORDSIZE32_SIZE_ULONG=1 in sysdeps/wasm32/bits/wordsize.h and add a port bits/typesizes.h setting __SSIZE_T_TYPE = __SLONGWORD_TYPE (s390-32 precedent: sysdeps/unix/sysv/linux/s390/bits/typesizes.h), then validate with a full glibc rebuild — __SSIZE_T_TYPE feeds __ssize_t throughout the library ABI surface (type-identity only on wasm32; int/long both 32-bit).
All 32-bit so ABI-neutral; breaks type-strict C/C++ (_Generic, template deduction, format-string checking) exactly like #1.
Refs #1 (fixed on joel-dev, commit 6ba49279).