2017-11-17 14 views
2

呼び出された関数を別のモジュールに抽出しようとしています。関数が定義された数の引数を持っていれば成功です。LLVMでは、可変数の引数を持つ関数を挿入/宣言する方法は?

// Create the arguments vector from the my argument list 
    SmallVector<Type *, sizeof(MyArgs)> ArgTys; 
    for (Value *V : MyArgs) 
     ArgTys.push_back(V->getType()); 

    // Just get a void return type 
    Type *RetTy = Type::getVoidTy(TempContext); 


    // Create a new function with MyArgs as arguments 
    Constant *C = TempM->getOrInsertFunction(
     "TempF", FunctionType::get(RetTy, ArgTys, false)); 

しかし、関数は引数の可変数を持っている場合、getOrInsertFunctionは唯一私がArgTysMyArgsでキャプチャすることができたの引数を追加します。


ソース関数に可変数の引数があるかどうかを確認するにはどうすればよいですか?

getOrInserFunctionを使用して可変数の引数を持つ関数を宣言するにはどうすればよいですか? documentationによると

答えて

2

  1. あなたが(だから、あなたの場合には、「ためにそのfalse引数を変更

    FunctionType::get(RetTy, ArgTys, true);

によって可変引数関数を宣言することができますTempF "機能)。

  1. 機能は方法私は実際にそれを見ていない

    bool isVarArg() const

+0

を備えた可変引数リストを使用している場合は、照会することができます。完全に見過ごされた 'FunctionType :: get'とその3番目の引数。ありがとうございました – nico