【发布时间】:2015-08-11 08:53:12
【问题描述】:
我们正在开发 Parsec 的一个分支(具有完整的 QuickCheck 测试套件、更好的错误消息和其他改进),并且已经取得了一些进展。大多数时候,我使用 Emacs 的 REPL,指定构建目标 tests(即显然是测试套件的名称)。这一直运行良好。
现在我们的东西通过了测试,一切似乎都很好,但是如果我用库目标(或省略它,即cabal repl 或cabal repl lib:megaparsec)启动 REPL 并做一些事情,我会得到 GHC 恐慌:
λ> parseTest (string "rere" <* eof) "reri"
ghc: panic! (the 'impossible' happened)
(GHC version 7.10.1 for x86_64-unknown-linux):
Loading temp shared object failed: /tmp/ghc9380_0/libghc9380_93.so: undefined symbol: _hpc_tickboxes_megapzuEw3SHAmfXgNLpm5a31oXO6_TextziMegaparsecziError_hpc
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
由于代码可以通过cabal repl tests 编译并正常工作,因此我得出结论,这无论如何都不是我的编程错误,但可能是一个错误。
我找到了这张票:https://ghc.haskell.org/trac/ghc/ticket/10761,但我们的库不使用 Template Haskell。
实际问题是:我应该怎么做以及如何解决这个问题?我什至无法判断它是 Cabal 还是 GHC,我不知道如何构建可以重现问题的最小示例。
我已经举报了:
【问题讨论】:
-
这看起来像是与
HPC(haskell 程序覆盖率)有关的一些怪事。您是否尝试过禁用 HPC(运行cabal clean然后再次配置,确保未启用HPC?) -
@bennofs,确实,如果没有
--enable-coverage选项,这不会发生!你怎么知道这是HPC相关的?还要添加这个作为答案,这可能对未来的读者有用:-D 我应该向 HPC 维护人员报告错误吗?