我们的 Travis构建矩阵包含一行使用 Undefined Behavior sanitizer 构建的行:
matrix:
- BUILD_MODE="all"
- BUILD_MODE="no-asm"
- BUILD_MODE="asan"
- BUILD_MODE="ubsan"
对于 UBsan,GCC 需要 4.9(或者可能是 5.0),这导致我们在 Trusty 上的测试失败:
...
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
...
g++ -DNDEBUG -g2 -O2 -fPIC -march=native -pipe -fsanitize=undefined -DCRYPTOPP_COVERAGE -c cryptlib.cpp
g++: error: unrecognized command line option ‘-fsanitize=undefined’
make: *** [cryptlib.o] Error 1
The command "make "$BUILD_MODE" && ./cryptest.exe v && ./cryptest.exe tv all" exited with 2.
Travis 有一个MATRIX_EVAL
看起来像某种选择器的东西。我认为它可以用来启用或禁用构建矩阵中的一行,但我不清楚如何使用它。该文档位于添加用于升级 gcc 和 clang的文档,但没有很好地解释。另请参阅Travis 文档中的构建 C 项目。
当 GCC 为 4.9 或更高版本时,我们如何使用MATRIX_EVAL
启用 UBsan 行?或者,如果MATRIX_EVAL
是错误的工具,那么当 GCC 为 4.9 或更高版本时,我们如何告诉 Travis 启用构建?