2017-09-26 115 views
2

我正在创建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指针。

回答

1

LLVM IR中没有'void *'类型。改用i8 *。

如果你想指定的“void*”实际值只需要创建一个常数整数,投中一个i8*(这是一种复杂,其实际作用,但它是唯一的方法)。

否则,如果你只是想要一个类型void*使用i8*

+0

我只想要一个类型为void *。我是llvm的新手,你能帮我解答一下CreateCall()的参数吗? – st91

+0

你想传递一个void *值,或者在函数声明中使用void *的类型。我很困惑你在问什么。 –

+0

如果要为变量类型或参数类型指定类型void *,请使用i8 *。所有指针在内存中的大小相同,因此当程序实际执行时,i8 *相当于void *。在实际的代码中,类型将被表示为“llvm :: Type :: getInt8PtrTy(llvm_context)” –