подпись mallo c, сгенерированная LLVM - PullRequest
0 голосов
/ 15 апреля 2020

Рассмотрим следующую функцию из 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...