At the LLVM level, size_t does not exist. This is a constructor in favor of the developer, which is typedef'd for the native type. Native types have a fixed size for the target architecture, and that is how the compiler presents them in LLVM bit code. Thus, on x86, size_t can be viewed by the front end as an unsigned long, which then writes to LLVM as i32 (since the LLVM assembly does not have an unsigned type).
source share