如何使用LLVMAPI创建对函数malloc的调用?

如何使用LLVMAPI创建对函数malloc的调用?,llvm,Llvm,我在尝试创建对函数malloc的调用时遇到了一个问题。下面是我用来为指针分配内存的代码 Type* tp = argument->getType(); AllocaInst* arg_alloc = builder.CreateAlloca(tp); if(tp->isPointerTy()){ if(!tp->getContainedType(0)->isPointerTy()){ Value *alloc_size = ConstantInt::get

我在尝试创建对函数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
llvm-3.4/include/llvm/Support/Casting.h:239:typename
llvm::cast_retty::ret_type llvm::cast(Y*)[带X=
llvm::IntegerType;Y=llvm::Type;typename llvm::cast_retty::ret_Type=llvm::IntegerType*]:断言`isa(Val)&&
“类型不兼容的cast()参数!”失败。
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 G信号+57
4 libc.so.6 0x00007f0122a0ffc8中止+328
5 libc.so.6 0x00007f0122a05a76
6 libc.so.6 0x00007f0122a05b22
7 libLLVM-3.4.so 0x00007f01240a85bc llvm::ConstantInt::get(llvm::Type*,无符号长,bool)+140
8 libLLVM-3.4.so 0x00007f012413ce0e
9 libLLVM-3.4.so 0x00007f012413d6bb llvm::CallInst::CreateMalloc(llvm::指令*,llvm::类型*,llvm::类型*,llvm::值*,llvm::值*,llvm::函数*,llvm::缠绕常数&+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, "");

大概就是你想要的。

在你的例子中,什么是
tp
?tp是一个类型指针。你能解释一下
ITy
参数的用法吗??