Because ints
and longs
were never really distinguished
in ILP32, a lot of existing code uses them indiscriminately while implicitly or explicitly
assuming that they are interchangeable. Any code that makes this assumption must be
changed to work for both ILP32 and LP64. While an int
and a long
are both 32–bits in the ILP32 data model, in the LP64 data model, a long
is 64–bits. For example,
int waiting; long w_io; long w_swap; ... waiting = w_io + w_swap;
produces the warning:
warning: assignment of 64-bit integer to 32-bit integer