В 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 только добавляет аргументы, которые я смог захватить с MyArgs в ArgTys,


Как проверить, имеет ли исходная функция переменное число аргументов?

Как использовать getOrInserFunction для объявления функции с переменным числом аргументов?

1 ответ

Решение

Согласно документации:

  1. Вы можете объявить переменную функцию аргумента

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

(Так что, в вашем случае, измените это false аргумент для функции "TempF".)

  1. Вы можете запросить, если функция использует список переменных аргумента с методом

    bool isVarArg() const

Другие вопросы по тегам