Учитывая некоторый исходный код, я хотел бы создать проход llvm, который извлекает информацию, относящуюся ко всему списку параметров функций.
Как я могу извлечь размер массива, переданного в качестве ввода в функцию?
Например:
foo(int A[100]){
...
}
Я хотел бы получить следующую информацию:
1) Тип элементов в массиве
2) Размер массива (в случае многомерного массива размеры связаны с различными размерами).
В моем проходе llvm у меня есть функция, которая задает входные данные llvm :: Type, проверяет, какой это тип типа, извлекает информацию, которая мне нужна, и, если необходимо, рекурсивно вызывает себя для анализа других элементов Type:
if ( argType->isPointerTy() ){
errs() << "Is a pointer.\n";
Type *Pointer_Type = argType->getPointerElementType();
IdentifyArgType(Pointer_Type);
}
Однако с помощью этой функции я могу получить только информацию, относящуюся к типу массива (int). Как я могу извлечь размер массива?
Я предполагаю, что мне нужно получить указательный элемент llvm :: Type, но я не могу понять, как получить доступ к этому объекту.