We would not choose the proper type for [u]intptr_t if we were
targeting -ffreestanding mode because we were substituting an equally
sized type, not the exact type.
An examination of Basic/Targets.cpp showed an irregular smattering of
target choices where we would get things wrong. This code has been
reoriented around Operating Systems since they are largely uniform
outside of ILP32-LLP64 differences.
This has found a few notable bugs:
- MIPS and ARM would have their size_t as int and their ptrdiff_t as long
- aarch64 on Linux had it's 64-bit type set as 'long long' instead of as long