Bugs:gcc

移動先: 案内, 検索

このページはまだ翻訳されていません。こちらから 英語版のページ が参照できます。 (このページは現在翻訳中です)

GCC のバグのレポート

GCC のバグレポートには、少なくとも以下の3つを含むようにしてください。

  • 再現例 (原語: testcase)
  • 再現例
  • 再現例

再現例

再現例は、短いものが望ましいです。例えば そのサイトに行き、tarball をダウンロードし、コンパイルし、エラーを見る 、なんていうのが悪い例です。

よい再現例は、 完結したたった一つのファイルでできています。 そのためには、include 行もなくす必要があります。これは、プロプロセッサ処理済のファイルにすることで実現できます。プリプロセッサ処理済のファイルは、以下で作成できます。

 gcc -E [other options ...] source.c > source.i

もしくは、 -save-temps を使ってください。

C++ のプリプロセッサ処理済ファイルの拡張子は source.ii となります。

さらに、再現例は 短い必要があります。 エラーを再現するのに必要な最低限のソースのみを含むようにすべきです。不要な関数や定義、ブロックは除きましょう。

Start by deleting whole functions, then top-level declarations, then simplify the function in which the error occurs. (まず関数全体を削除し、次にトップレベルの宣言を削除し、それからエラーがおきている関数を簡素化しましょう。) 構造体やクラスから、必要ないメンバを除きましょう。 It's good as long as it still shows the error. (それでもエラーを示す限り、それがよいことです。)

本当に必要な関数だけがコンパイルされるよう、気をつけましょう。

最近の GCC では、使われていない 静的関数はコンパイルされませんので、明示的に静的関数で無くす必要がある場合もあります。

200行 以上のものは大きすぎます。100行くらいなら、許容範囲です。

関数が3つ以上含まれているものは、多分まだ小さくできる余地があります。 ソースを小さくする作業は時間がかかりますが、あなたがしてくれないと私たちがしなければならず、私たちにとっていつもそれが作業のボトルネックなのです。あなたのバグレポートが大きすぎる場合、私たちはあまり熱心に読まないかもしれません。

一般的なアドバイス

良いバグレポートは、基本的には以下のスタイルに従うべきです。

 下のソースを:
   <ソースコード> もしくは添付ファイル
 以下のコマンドでコンパイルすると:
   % gcc [your options] bla.i
 以下が発生します:
   <結果>
 環境は下の通りです:
   <gcc -v output>
   <uname -a output>
 ここでは、本来なら下の結果が得られるべきです:
   <期待される結果>
 何故なら <あなたがそう考える理由> だからです。

期待される結果が明らかであり、述べる必要がない場合もあります。例えば、コンパイラーの内部エラーの報告の場合、期待される結果はもちろん、内部エラーが発生しないことです。 If you suspect a miscompilation, design the testcase as runtime test, which has some visible effect (e.g. calling abort when the wrong result is calculated, or printing the result, saying which you would expect).

コンパイルコマンドなどは、生の入力、出力を貼り付けて報告してください。例えば -O2 オプション付きでコンパイルする などのように言葉で示すのは悪い例で、次のコマンドでコンパイルします: # gcc -c -O2 -fPIC -funny-options bla.i などのように、ターミナルからのコピペが一番良いのです。

システム環境の詳細について述べるのも忘れないでください。それと念のため、もちろん再現例もね。

Nice to have

We use compilers which usually have changes on top of the FSF GCC. But it's still often the case that the FSF GCC shows exactly the same error. If you are in a position to verify this, then please do so, and report the bug directly to the bugzilla of GCC.

Also, please see http://gcc.gnu.org/bugs.html for more information how to write a good bug report for GCC.