外部関数 (つまり、現在のコンパイル単位で定義されていない関数) を直接または間接的に呼び出す関数を見つける LLVM パスを作成しようとしています。
たとえば、C 次のコードで実行すると、次のようになります。
void a(string s) {print(s)};
int b(int x) {return 1}
void c(void) {a("hello);b}
a と c にフラグが立てられるはずです。
特定の呼び出し inst が外部関数への直接呼び出しに対応しているかどうかを確認する方法が必要です。私の最初のアプローチは、呼び出し inst から関数オブジェクトを抽出し、次に GlobalValue クラスから継承された isDeclaration() メソッドを使用することでした。これにより、すべての関数呼び出しで true が返されましたが、これは明らかに望ましくありません。
これを処理する正しい方法は何ですか?