2017-09-26 17 views
2

LLVM関数呼び出しを作成しています。その呼び出しに引数としてvoidポインタを渡すにはどうしたらいいですか?私の関数として "_testFunc"があり、引数としてvoidポインタを渡す必要があります。LLVMへのvoidポインタの転送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は、無効なポインタである必要があります。

答えて

1

LLVM IRには「無効*」タイプはありません。代わりにi8 *を使用してください。

あなたが「void*」の実際の値を指定したい場合は、単に整数の定数を作成し、i8*にキャスト(それが実際に何をするかのために複雑なのそれのようなものが、それは唯一の方法です)。

void*のタイプを使用したい場合は、i8*を使用してください。

+0

void *の型が必要です。私はllvmの新機能です。CreateCall()の引数としてどうやって取得するのか教えてください。 – st91

+0

void *を渡すか、関数宣言でvoid *型を使用しますか?私はあなたが求めているものと混同しています。 –

+0

変数型または引数型にvoid *型を指定する場合は、i8 *を使用します。すべてのポインタはメモリ内で同じサイズですので、i8 *はプログラムが実際に実行されたときのvoid *と等価です。実際のコードでは、型は "llvm :: Type :: getInt8PtrTy(llvm_context)"として表されます。 –

関連する問題