我在我的项目中使用 LLVM。
llvm::Function.isDeclaration()
和 llvm::Function.isDeclarationForLinker()
有什么区别?
isDeclarationForLinker
是以下任一者:
GlobalValue
是一个声明GlobalValue
有 AvailableExternallyLinkage
我从
isDeclarationForLinker
函数的定义中得到了这个:
bool isDeclarationForLinker() const {
if (hasAvailableExternallyLinkage())
return true;
return isDeclaration();
}
ExternallyAvailableLinkage
的意思是:
具有“
”链接的全局变量永远不会发送到与 LLVM 模块对应的目标文件中。从链接器的角度来看,available_externally
全局相当于外部声明。available_externally
它们的存在是为了允许在了解全局定义的情况下进行内联和其他优化,已知全局定义位于模块之外的某个地方。
具有
链接的全局变量可以随意丢弃,并允许内联和其他优化。此链接类型仅允许用于定义,不允许用于声明。available_externally
基本上,区别在于
isDeclaration
表示没有定义。
isDeclarationForLinker
表示有定义,但不会发出全局代码