GCCバージョン(4.8.2から5.3.0)を最近更新し、一部のAdaアプリケーションで予期しない制約エラーが発生しました。 I以下に減少しました:GCCアップデート後に予期しないCONSTRAINT_ERRORが発生しました
-- moo.adb
with text_io;
procedure moo is
type thing_type is (something1,something2,something3,something4,something5,something6);
for thing_type use (something1 => 1,something2 => 2,something3 =>
3,something4 => 4,something5 => 5,something6 => 6);
for thing_type'size use 32;
type thing_array_t is array (0 .. 5) of thing_type;
thing_array : thing_array_t := (others => something1);
begin
text_io.put_line("item 0 = " & thing_type'image(thing_array(0)));
end moo;
このプログラムは、GCCのバージョンのいずれかでうまくコンパイルされます4.8.2で構築された場合には、予想通り、出力がある(以下、単に「gnatmake moo.adb」を使用してコンパイル。) :5.0.3で構築された場合
item 0 = SOMETHING1
、我々は代わりに32ビットおよび64ビットとしてコンパイルするとき
raised CONSTRAINT_ERROR : moo.adb:13 invalid data
が興味深いことに、結果は全く同じである受け取ります。 thing_typeのsize句の削除、列挙子への値の追加または削除、配列内の項目数の変更、配列の初期化に異なる値の使用など、多くのことを5.3.0でうまく動作させるように変更できます。このコードでこの動作を説明できる明らかな問題はありますか?
のですか? (あなたのリスティングには12行しかありません) –
申し訳ありません、私はそれを貼り付けたときに元のものからいくつかの空白行を削除しました。13行目はtext_io行です。 – Kevin