通过本次的梳理,可以了解GCC中到底在测试什么样的功能,当添加或者修改代码时,如何验证是否通过,提供了一种直接的参考思路。本次GCC中的FAIL项的分析是基于多个FAIL项的成功修复基础上的总结,提供了一种分析思路,可能有一些地方写的不是那么完整,有问题可以一起讨论。
一、FAIL项的来源
1、什么是FAIL项
GCC是GNU编译器套件中的一个开源编译器,它包含了C、C++、Objective-C、Fortran、Ada等多种语言的编译器。在GCC的编译过程中,会有一些FAIL项出现,表示编译过程中出现了错误或者未通过的测试用例。其中测试用例就是验证编译器所具有的功能,当我们在构建目录后,需要经过编译、回归测试、安装等步骤,经过回归测试(make check)就可以检查当前编译器的测试情况。
2、FAIL项的查找
2.1测试套件 testsuite的介绍
GCC 中的测试套件 TestSuite 是一组用于对 GCC 编译器进行测试的测试程序集合。这些测试程序用于检测编译器的功能、正确性和性能,并可以用于验证 GCC 是否符合规范并且能够处理各种语言和代码类型。
TestSuite 包含了大量的测试代码,包括 C 语言、C++、Fortran 等多种语言的程序,以及针对编译器前端和后端、库函数、链接器等不同部分的测试。测试套件由自动化工具管理,可以为不同平台生成测试结果报告,以提高测试效率和准确性。
在构建目录后,回归测试主要是使用源码$(source)/gcc/testsuite/目录下的文件,包含各种语言的测试,如下
如上图,标记出来的目录是和目标架构相关的测试用例,包含 aarch64、 i386、 loongarch、alpha、 mips等各种架构的代码。其他的一些测试目录就是和架构无关,如 g++.dg,gdc.test, go.dg等。
2.2 FAIL项查找
(1)回归测试(make check)
此命令会测试所有的测试用例,结果都会保存在$(build)/gcc/testsuite/*/目录下的日志文件,如C语言对应的日志文件gcc.sum和gcc.log。其中gcc.sum会总结每一个文件执行后的结果,gcc.log会保存详细的执行结果,包括测试命令等。这是一个整体的测试方法,为了更加方便的测试,GCC也提供了单个文件的测试,以Loongarch架构上通用的 fp-ftint.c为例说明,命令如下
make check-gcc RUNTESTFLAGS="loongarch.exp=fp-ftint.c"
此测试用例(fp-ftint.cÿ