给出一些源代码,我想创建一个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,但无法弄清楚如何访问该对象。
答案 0 :(得分:0)
尝试将参数类型转换为ArrayType(而不是元素类型),然后使用getNumElements函数。 参见http://llvm.org/doxygen/classllvm_1_1ArrayType.html