I'll probably regret this, but the gcc x86_64 approach hasn't worked out too badly.the assumption usually made in practice is a little more subtle: int <= long[=32] < long long [=64]. most older programs tended to use int for things such as for loop values, that probably needed to be at least 16 bits, but might not need to be as much as 32. by contrast, a `long' quite often needed to be 32 bits, and often that was `no more, no less'.
When we did our 64 bit port recently, it was only cases of trying to stash a pointer
in an int which bit us. When I say us, I mean the authors of certain
Linux packages. At one time I thought there was a maxim of "int is the efficient
machine size, long is big enough to hold a pointer", so gcc x86_64 can claim to
meet that reasoning.
Nigel
