LLVM中的Module::getOrInsertFunction
有4个变体,如下所示,所有这些变量都返回Constant*
。为什么返回创建Constant
的指针Function
?
Constant * getOrInsertFunction (StringRef Name, FunctionType *T, AttributeSet AttributeList)
答案 0 :(得分:6)
四种可能性:1。如果它不存在,请添加原型 功能并返回它。 2.如果它存在,并且具有本地链接,则 重命名现有函数并插入新函数。 3.否则, 如果现有函数具有正确的原型,则返回 现有功能。最后,函数存在但有错误 prototype:返回带有constantexpr强制转换的函数 原型。
对于案例4,返回值为ConstantExpr*
,而不是Function*
。因此,返回类型是Constant*
,即公共超类。