因为通过函数指针的调用的存在call graph的构建会涉及到alias analysis,对于C这种极度弱类型的语言来说,pointer alias analysis基本上确定是一个NP问题,所以简单来说本文的算法可以说是基于call graph的type/live flow sensitive inter-procedure alias analysis,inter-procedure alias analysis又回和intra-procedure alias analysis互相共享数据流。
下面给出alias的简化计算框架。
```c
/* The algorithm for compute current alias set for expression x*/
CurrentAliasSet(x)
build call graph CG/* GCC already have built*/
loop for every procedure f in CG
initialize alias set of f
end loop
repeat until CG traversed
loop for every procedure f in CG
/* 对于每个procedure的block的类型推断为函数指针的表达式x细分计算alias作为intra-procedure alias sets的一部分*/
using the inter-procedure alias sets compute the intra-procedure alias sets
using the intra-procedure alias sets update the inter-procedure alias sets