2015-12-14 100 views
1

我正在遍歷模塊的函數列表,如下所示。 我正在尋找一種方法來確定一個Function *f是一個聲明還是一個定義。 (通過轉儲功能似乎在列表中包含兩種類型。)找出函數類型在llvm中

for (Module::iterator f = M->begin(), fend = M->end(); f != fend; ++f) { 
    ... 
} 

回答

1

Function手冊:

如果BasicBlock列表是空的,這表明Function實際上是一個功能聲明:函數的實際主體尚未鏈接。

,並在Important Public Members of the Function下一節中,你會發現你想要的功能:

布爾isDeclaration()

返回函數是否​​已經身體定義。如果函數是「外部的」,它沒有主體,因此必須通過鏈接到在不同翻譯單元中定義的函數來解決。

它爲您做空虛檢查。