【发布时间】:2016-12-22 21:29:15
【问题描述】:
我最近将我的 g++ 版本更新为 6.3.0 (g++ (Homebrew GCC 6.3.0) 6.3.0),但现在我得到了g++: internal compiler error: Segmentation fault: 11 (program cc1plus)。
使用以前的版本(我不完全确定,但在附近)5.2 一切正常。在我的另一台计算机上,我使用 g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1,这也可以。
代码是:
constexpr bool checkForPrimeNumber(const int p, const int t)
{
return p <= t or (p % t and checkForPrimeNumber(p, t + 2));
}
constexpr bool checkForPrimeNumber(const int p)
{
return p == 2 or (p & 1 and checkForPrimeNumber(p, 3));
}
int main()
{
static_assert(checkForPrimeNumber(65521), "bug...");
}
我用
编译代码g++ test.cpp -std=c++11 -fconstexpr-depth=65535
我可以做些什么来解决这个问题?
编辑:
错误报告sumitted
【问题讨论】:
-
“内部编译器错误” - 是编译器中的一个近乎自动的错误,应该这样归档。在您的平台上使用clang(它是Mac,对吗?),静态断言以正确的原因开箱即用:constexpr eval递归深度到512。如果g ++打算这样做,我认为它会比喷出内部编译器错误和段错误更健壮。
-
@WhozCraig clang 和 g++ 的递归限制都是 512。这就是我使用
-fconstexpr-depth=65535的原因。使用 clang(Apple LLVM 版本 8.0.0 (clang-800.0.42.1))我得到clang: error: unable to execute command: Segmentation fault: 11 -
Lolz,好吧,你给了我一个新的、可预测的方式来让 Xcode 崩溃;谢谢你=P。这些都不应该崩溃,而且都是供应商恕我直言的错误。
-
作为一种解决方法:您是否尝试过编写它的迭代版本(需要 c++14)?
-
@downvoter 怎么了?