https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125879
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- i.e. it's defined as either 0L or 0 The reason is that it needs to be the same size as a pointer, and the type with the lowest rank is chosen. For x86 int has the same width as a pointer and int has lower rank than long, so int is used.. For x86_64 long has the same width as a pointer and long has lower rank than long long, so long is used.
