gpt4 book ai didi

llvm - 如何使用 LLVM API 创建对函数 malloc 的调用?

转载 作者:行者123 更新时间:2023-12-05 01:01:36 24 4
gpt4 key购买 nike

我在尝试创建对函数 malloc 的调用时遇到问题。下面是我用来为指针分配内存的代码

Type* tp = argument->getType();
AllocaInst* arg_alloc = builder.CreateAlloca(tp);
if(tp->isPointerTy()){
if(!tp->getContainedType(0)->isPointerTy()){
Value *alloc_size = ConstantInt::get(Type::getInt64Ty(getGlobalContext()),
dl->getTypeAllocSize(tp->getPointerElementType()), false);
CallInst::CreateMalloc(arg_alloc, tp, tp->getPointerElementType(), alloc_size);

}
}

但我得到了一个错误:
llvm-3.4/include/llvm/Support/Casting.h:239: typename 
llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X =
llvm::IntegerType; Y = llvm::Type; typename llvm::cast_retty<X,
Y*>::ret_type = llvm::IntegerType*]: Assertion `isa<X>(Val) &&
"cast<Ty>() argument of incompatible type!"' failed.
0 libLLVM-3.4.so 0x00007f01246a4035 llvm::sys::PrintStackTrace(_IO_FILE*) + 37
1 libLLVM-3.4.so 0x00007f01246a3fb3
2 libpthread.so.0 0x00007f012392d340
3 libc.so.6 0x00007f0122a0cbb9 gsignal + 57
4 libc.so.6 0x00007f0122a0ffc8 abort + 328
5 libc.so.6 0x00007f0122a05a76
6 libc.so.6 0x00007f0122a05b22
7 libLLVM-3.4.so 0x00007f01240a85bc llvm::ConstantInt::get(llvm::Type*, unsigned long, bool) + 140
8 libLLVM-3.4.so 0x00007f012413ce0e
9 libLLVM-3.4.so 0x00007f012413d6bb llvm::CallInst::CreateMalloc(llvm::Instruction*, llvm::Type*, llvm::Type*, llvm::Value*, llvm::Value*, llvm::Function*, llvm::Twine const&) + 43

我只想做一个简单的事情:假设有一个变量 p,如果 p 是
一个指针然后为 p 分配内存。有什么提示可以绕过这个错误吗?

最佳答案

如果 Ty 是分配的类型:

Type* ITy = Type::getInt32Ty(Context);
Constant* AllocSize = ConstantExpr::getSizeOf(Ty);
AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
Instruction* Malloc = CallInst::CreateMalloc(Builder->GetInsertBlock(),
ITy, Ty, AllocSize,
nullptr, nullptr, "");

大致就是你想要的。

关于llvm - 如何使用 LLVM API 创建对函数 malloc 的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com