Почему у llvm :: FunctionType (Type *, bool) есть bool, если по определению он не принимает параметры? - PullRequest
0 голосов
/ 12 апреля 2020

Одно определение FunctionType *FunctionType::get:

FunctionType *FunctionType::get(Type *Result, bool  isVarArg)   

Документация гласит:

Создание FunctionType без параметров.

Когда мы собираемся использовать параметр bool isVarArg, чтобы указать, что число аргументов является переменным, если тип не имеет параметров?

1 Ответ

1 голос
/ 12 апреля 2020

Причина этого в том, что переменные аргументы обрабатываются LLVM иначе, чем фиксированные / позиционные параметры. Отсутствие фиксированных параметров (вид, который будет отображаться в ArrayRef<Type *> llvm::FunctionType::params () const) - это то, что в документации подразумевается под «без параметров», поэтому переменные освобождаются.

Если вы проверите примечание для getNumParams(), оно говорит:

Возвращает количество фиксированных параметров, требуемых для этого типа функции. Это не учитывает varargs.

...