Рассмотрим следующую функцию из Core. cpp в LLVM 9.0.0:
LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
const char *Name) {
Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
ITy, unwrap(Ty), AllocSize,
nullptr, nullptr, "");
return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
}
Мой вопрос касается строки 3. Подпись mallo c равна
void *malloc(size_t size);
Является ли это подозрительно неправильным, если этот конструктор предполагает, что size_t имеет значение 32-битное int? Будет ли бэкэнд LLVM достаточно умным, чтобы связать правильный, который в 64-битной системе имеет 64-битную int?