2017-09-26 113 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)」 –