Next: Torture Tests, Previous: profopt Testing, Up: Testsuites
文件compat.exp提供了对二进制兼容性测试的语言无关的支持。 它支持测试遵循相同ABI的两个编译器,或者编译器选项的多个集合, 在一起工作时不影响二进制兼容性。它是打算用来补充ABI测试包的。
该框架支持的测试具有三部分,分别在不同的源文件中:主程序, 和两个相互作用来拆分要测试的功能的部分。
每个测试中,主程序和一个功能部分由测试GCC编译。 另一部分可以由一个候选编译器来编译。如果没有指定候选编译器, 则所有的这三个源文件都由测试 GCC编译。你可以指定一个编译器选项对。 每一对中第一个元素指定了测试GCC使用的选项,第二个元素用于候选编译器。 每个测试都是用这些选项来编译。
compat.exp定义了缺省的一对编译器选项。 这些可以通过定义环境变量COMPAT_OPTIONS来取代,如:
COMPAT_OPTIONS="[list [list {tst1} {alt1}] ...[list {tstn} {altn}]]"
其中tsti和alti是选项列表,要测试的编译器使用tsti,
候选的编译器使用alti。例如,
对于[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]
,
测试会首先被要测试的编译器使用-g -O0来编译,
并且被候选编译器使用-O3来编译。测试在第二次的时候,
测试编译器会使用-fpic,候选编译器会使用-fPIC -O2。
候选编译器通过将环境变量定义为安装的编译的全路径名来指定;对于C,
定义ALT_CC_UNDER_TEST,对于C++,定义ALT_CXX_UNDER_TEST。
这些将被写入DejaGnu使用的site.exp文件中。缺省情况,是由要测试的编译器,
使用COMPAT_OPTIONS中每个编译选项对的第一个,来构建每个测试。
当ALT_CC_UNDER_TEST或ALT_CXX_UNDER_TEST为same
时,
每个测试将使用测试编译来构建,但是使用COMPAT_OPTIONS中的选项组合。
若要对要测试的编译器和另一版本的使用指定编译选项的GCC, 只运行C++兼容性测试包,则在objdir/gcc下执行下列命令:
rm site.exp make -k \ ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ COMPAT_OPTIONS="lists as shown above" \ check-c++ \ RUNTESTFLAGS="compat.exp"
如果一个测试当源文件由不同编译器编译的时候执行失败, 而当文件由同一编译器编译的时候执行成功,则表明生成代码或运行时支持不兼容。 如果一个测试对于候选编译器执行失败,但对于测试编译器却执行成功, 则可能是因为一个bug在测试编译器中已经被修改好,但还存在于候选编译器中。
二进制兼容性测试支持少数在测试文件的注释中出现的测试框架命令。
dg-require-*
dg-options
dg-xfail-if