将void指针传递给LLVM IRBuilder CreateCall
问题描述:
我正在创建LLVM函数调用。如何将void指针作为参数传递给该调用。我有“_testFunc”作为我的函数,并需要传递void指针作为参数。将void指针传递给LLVM IRBuilder CreateCall
llvm::Function *testFunc= m_mod->getFunction("_testFunc");
llvm::IRBuilder<> builder(instruction.getNextNode());
llvm::Value *arg = argument is void pointer
builder.CreateCall(testFunc, arg);
所以这个arg
必须是一个void指针。
答
LLVM IR中没有'void *'类型。改用i8 *。
如果你想指定的“void*
”实际值只需要创建一个常数整数,投中一个i8*
(这是一种复杂,其实际作用,但它是唯一的方法)。
否则,如果你只是想要一个类型void*
使用i8*
。
我只想要一个类型为void *。我是llvm的新手,你能帮我解答一下CreateCall()的参数吗? – st91
你想传递一个void *值,或者在函数声明中使用void *的类型。我很困惑你在问什么。 –
如果要为变量类型或参数类型指定类型void *,请使用i8 *。所有指针在内存中的大小相同,因此当程序实际执行时,i8 *相当于void *。在实际的代码中,类型将被表示为“llvm :: Type :: getInt8PtrTy(llvm_context)” –