В 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 ответ
Решение
Согласно документации:
Вы можете объявить переменную функцию аргумента
FunctionType::get(RetTy, ArgTys, true);
(Так что, в вашем случае, измените это false
аргумент для функции "TempF".)
Вы можете запросить, если функция использует список переменных аргумента с методом
bool isVarArg() const