openSUSE:GCC 错误报告
报告 GCC 错误
我们需要至少三个要素来提交关于 GCC 的错误报告
- 一个测试用例
- 一个测试用例
- 一个测试用例
测试用例
测试用例应该简短。它不是访问该网站,下载这个压缩包,编译,查看错误。一个好的测试用例只包含一个自包含的文件。请考虑这一点,一个文件。这意味着,没有包含文件。因此它必须经过预处理。使用
gcc -E [other options ...] source.c > source.i
或者使用-save-tempsC++ 预处理后的文件命名为source.ii.
此外,它需要简短。它应该只包含显示错误的源代码。没有额外的函数或声明。删除所有不必要的块。首先删除整个函数,然后删除顶层声明,然后简化发生错误的函数。删除结构体或类中的非必要成员,这可能需要代码更改。只要它仍然显示错误,就可以。请记住,只有必要的函数会被编译。较新的 GCC 不会编译从未使用过的静态函数。因此,您可能需要将函数设为非静态。
任何超过 200 行的代码可能都太长了。100 行的错误报告更好。包含超过三个函数的代码可能没有尽可能地减少。再努力一下。减少代码需要时间,但如果您不这样做,我们必须这样做,而我们已经是瓶颈。这意味着,如果您的错误报告太长,我们可能不会非常热情地查看它。
通用建议
像所有好的错误报告一样,它应该遵循基本的风格
When compiling this: <source code> or mention an attachment with this command: % gcc [your options] bla.i this happens: <outcome> with this system: <gcc -v output> <uname -a output> I instead expect this to happen: <expected outcome> because of <reason why you think so>.
有时预期的结果是显而易见的,不应该提及。例如,如果您报告内部编译器错误,预期的结果当然是,这个 ICE 不会发生。无需提及。如果您怀疑是错误编译,请将测试用例设计为运行时测试,该测试具有一些可见的效果(例如,在计算出错误结果时调用 abort,或打印结果,说明您期望的结果)。
请粘贴您使用的确切命令行,粘贴 -v 输出,以及 uname -a 输出。我们不想要使用 -O2 编译,即用您的语言描述,当完全可以更精确地说使用# gcc -c -O2 -fPIC -funny-options bla.i,其中命令是从终端中原样复制粘贴的。
不要忘记系统细节。我提到过我们需要一个测试用例了吗?
锦上添花
我们使用的编译器通常在 FSF GCC 的基础上进行修改。但通常情况下,FSF GCC 会显示完全相同的错误。如果您有条件验证这一点,请这样做,并将错误直接报告到 GCC 的 bugzilla。
此外,请参阅 http://gcc.gnu.org/bugs.html,了解更多关于如何编写好的 GCC 错误报告的信息。