#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