Как извлечь размер массива из списка параметров функции с помощью llvm - PullRequest
1 голос
/ 12 апреля 2019

Учитывая некоторый исходный код, я хотел бы создать проход 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, но я не могу понять, как получить доступ к этому объекту.

1 Ответ

0 голосов
/ 15 апреля 2019

Попробуйте преобразовать тип параметра в ArrayType (не тип элемента), а затем используйте функцию getNumElements. Смотри http://llvm.org/doxygen/classllvm_1_1ArrayType.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...