构建 C++11 代码时 Coverity 中的内部错误

Internal errors in Coverity when building C++11 code

我在构建 C++11 项目时在 Coverity 中遇到内部错误。日志显示如下错误:

Internal error #2688: assertion failed at: "edg/src/lower_name.c", line 4810
internal error #2688: assertion failed at: "edg/src/scope_stk.c", line 10898

我正在使用 Mac OS X (Sierra) 并使用以下配置编译器:

cov-configure --comptype clangcxx -co /usr/bin/c++

以下是重现问题的所有步骤:

git clone --recursive -b develop https://github.com/actor-framework/actor-framework.git
cd actor-framework
./configure --build-type=debug --with-runtime-checks --no-opencl --no-python
cov-build --dir "cov-int" make

我在这里上传了完整的构建日志(它很大,你已经被警告过):https://gist.githubusercontent.com/Neverlord/bb5709452236d584fcaabf56c0ae7295/raw/aad490f79b4fa2fab40dd99ffbe9aa75611b2fff/build-log.txt

非常感谢任何帮助。

我看了一下构建日志,它似乎与您的 Clang 配置无关(这很好,因为那应该使用 Coverity 的基于 Clang 的 FE,而不是基于 EDG 的 FE。

其中一个有问题的汇编是:

/opt/local/bin/g++-mp-4.9 -Dlibcaf_core_shared_EXPORTS -I/opt/local/include -I/Users/jenkins/jenkins_home/workspace/CAF/nightly/actor-framework/libcaf_opencl -I/Users/jenkins/jenkins_home/workspace/CAF/nightly/actor-framework/libcaf_core -I/Users/jenkins/jenkins_home/workspace/CAF/nightly/actor-framework/libcaf_io -I/Users/jenkins/jenkins_home/workspace/CAF/nightly/actor-framework/libcaf_test -I/Users/jenkins/jenkins_home/workspace/CAF/nightly/actor-framework/libcaf_core/. -std=c++11 -Wextra -Wall -pedantic -Wno-missing-field-initializers -fPIC -g -fPIC -o CMakeFiles/libcaf_core_shared.dir/src/abstract_coordinator.cpp.o -c /Users/jenkins/jenkins_home/workspace/CAF/nightly/actor-framework/libcaf_core/src/abstract_coordinator.cpp

内部断言似乎不在 Coverity 的错误数据库中,因此这看起来代表了基于 EDG 的 FE 中以前未知的问题。如果您能创建一个复制器并将其发送到 scan-admin@coverity.com,将不胜感激;诸如此类的内部错误会破坏 Coverity 的错误恢复,通常优先修复。

一旦识别出导致断言的代码结构,就可以解决它(例如使用 --ppp_translator)。

以下步骤可以帮助您创建复制器:

$ cov-manage-emit --dir <idir> -tp 'failure()' list

(从失败列表中选择一个与您在构建日志中看到的内部断言匹配的失败,记下 TU 编号)

$ cov-manage-emit --dir <idir> --tu <TU> reduce

(缩小后的文件会放在/output/preprocessed下)。