Since the C language imposes little restriction on the use of function pointers, the task of call graph construction for a C program is far more di cult than what the algorithms designed for Fortran can handle. From the experience of implementing a call graph extractor in the IMPACT compiler, we found the call graph construction problem has evolved into an interprocedural pointer analysis problem. A complete and precise call graph can be constructed from fully resolved function pointers. In this paper, we report an empirical study of function pointers in the complete SPECint92 and SPECint95 benchmarks. We evaluate the resolution of function pointers and the potential program transformations enabled by a complete call graph. We also examine several real examples of function pointer manipulation found in these benchmarks. They can be considered as critical issues in the design of a complete interprocedural pointer analysis algorithm. 1
Ben-Chung Cheng, Wen-mei W. Hwu