Как извлечь размер массива из списка параметров функции с помощью llvm

#llvm

#llvm

Вопрос:

Учитывая некоторый исходный код, я хотел бы создать llvm-проход, который извлекает информацию, относящуюся ко всему списку параметров функций. Как я могу извлечь размер массива, переданного в качестве входных данных функции?

Например:

 foo(int A[100]){
 ...
}
  

Я хотел бы получить следующую информацию:
1) Тип элементов в массиве
2) Размер массива (в случае многомерного массива размеры, связанные с разными измерениями).

В моем проходе llvm у меня есть функция, которая при вводе llvm ::Type проверяет, какой это тип, и извлекает нужную мне информацию и, при необходимости, рекурсивно вызывает себя для анализа других элементов типа:

 if ( argType->isPointerTy() ){
    errs() << "Is a pointer.n";
    Type *Pointer_Type = argType->getPointerElementType();
    IdentifyArgType(Pointer_Type);
}
  

Однако с помощью этой функции я могу получить только информацию, относящуюся к типу массива (int). Как я могу извлечь размер массива?

Я предполагаю, что мне нужно получить llvm::Type указанного элемента, но я не могу понять, как получить доступ к этому объекту.

Комментарии:

1. @WeatherVane: Вопрос не в семантике C или C . Речь идет о данных LLVM.

2. Спасибо, я только что изменил тег.

Ответ №1:

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