【问题标题】:Internal errors in Coverity when building C++11 code构建 C++11 代码时 Coverity 中的内部错误
【发布时间】:2017-08-23 02:18:21
【问题描述】:

在构建 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

非常感谢任何帮助。

【问题讨论】:

  • AFAIK,Coverity 是一种商业许可产品,具有付费支持。您是否联系过他们的支持人员?
  • 我正在使用 Coverity 的免费开源版本。 Coverity Scan 上的 Troubleshooting 部分建议在 stackoverflow 上提问......所以我想我会试一试。
  • “内部错误”表示编译器中的错误。对此我们无能为力,除非 Coverity 的某个人读到了这篇文章。
  • Coverity 的@BoPersson Somone 正在阅读这篇文章 :)

标签: c++ coverity


【解决方案1】:

我查看了构建日志,它似乎与您的 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 下)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2016-10-09
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多