内部编译器错误信息是什么意思,我该怎么办?

5
我正在尝试使用pgCC编译器编译我的C++程序,该程序使用MPICH和NAG C库(我使用NAG生成随机数)。
然而,编译器给出了以下错误信息:
PGCC-S-0000-Internal compiler error. linearize: bad ili #:       0 (mpisim.C: 225)
PGCC-S-0000-Internal compiler error. gen_aili: unrec. ili opcode:       0 (mpisim.C: 225)
PGCC-S-0000-Internal compiler error. linearize: bad ili #:       0 (mpisim.C: 266)
PGCC-S-0000-Internal compiler error. gen_aili: unrec. ili opcode:       0 (mpisim.C: 266)
PGCC/x86 Linux 12.4-0: compilation completed with severe errors

我不知道这些信息是什么意思。有人能解释一下它们的含义吗?

有没有办法找出问题所在行的位置?(mpisim.C: 225)中的255是否表示我的代码中的行号?


9
意思是编译器有漏洞。 - Luchian Grigore
2
向编译器供应商提交错误报告。 - Leonid Volnitsky
4个回答

15

内部编译器错误是编译器中的一个漏洞。除了向编译器供应商报告问题之外,你几乎无能为力。

通常情况下,当你尝试编译不正确的代码时,ICE(内部编译器错误)会发生,但编译器在处理有效的C++时也可能出现问题。这种语言非常复杂,很难测试所有可能的特性及其组合方式。

如果你能够找出导致崩溃的代码行,可以尝试以更简单的方式重写它(例如通过引入其他本地变量或typedefs)。


谢谢Kerrek,那么有没有办法让我找出问题行的位置?(mpisim.C: 225)中的255是否表示我的代码中的行号? - Vokram
@Vokram: 不,那些行是指编译器自己的源代码。你可以对你的代码进行简单的二分搜索:删除一半并查看错误所在的位置。 - Kerrek SB

1
有时候当我下载一堆资源时会出现这种情况。任何事情都可能出错,比如两个脚本共享命名空间或者脚本不适用于您正在使用的Unity版本。
我的建议是:
1)检查所有脚本是否存在重复名称,并确保将它们组织在文件夹中以使其更简单!

2)如果你完全搞不清楚发生了什么,请从最新到最旧开始删除你下载的资产文件夹。每次删除一个资产文件夹时请检查错误是否改变。一旦找到引起麻烦的脚本,只需要找出原因即可。

1

它们表明编译器在自身中发现了错误或不一致之处。类似于在您的代码中使用assert

如果您编译的内容非常奇怪和违法,那么可能只是编译器团队没有测试过这种用例。否则,这很可能是编译器的问题。


9
不是“否则”的意思。这是编译器的错误,完全是错误,我所知道的每个编译器供应商都会将其视为错误。无论您在代码中写了什么,编译器都应该正确处理它,或者诊断出代码中的错误。 - James Kanze
唯一一次 ICE 可能不是一个 bug 的情况是当内存耗尽时,但这里并非如此。 - Demi

0

如果你遇到了内部编译器错误,很有可能是由于硬件问题造成的。也许你的内存有故障?尝试运行memtest86。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接