为什么Module :: getOrInsertFunction返回一个指向Constant的指针

时间:2016-02-02 20:39:38

标签: llvm

LLVM中的Module::getOrInsertFunction有4个变体,如下所示,所有这些变量都返回Constant*。为什么返回创建Constant的指针Function

Constant * getOrInsertFunction (StringRef Name, FunctionType *T, AttributeSet AttributeList)

1 个答案:

答案 0 :(得分:6)

documentation读取:

  

四种可能性:1。如果它不存在,请添加原型   功能并返回它。 2.如果它存在,并且具有本地链接,则   重命名现有函数并插入新函数。 3.否则,   如果现有函数具有正确的原型,则返回   现有功能。最后,函数存在但有错误   prototype:返回带有constantexpr强制转换的函数   原型。

对于案例4,返回值为ConstantExpr*,而不是Function*。因此,返回类型是Constant*,即公共超类。