我們最近更新了GCC版本(4.8.2至5.3.0),並在某些Ada應用程序中開始接收意外的約束錯誤。我已經將它歸納爲以下: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」編譯。)就好了:
item 0 = SOMETHING1
當與5.0.3建成,我們代替接收
raised CONSTRAINT_ERROR : moo.adb:13 invalid data
有趣的是,當如32和64位彙編的結果是完全一樣的。爲了使程序在5.3.0下正常工作,可以改變許多東西:刪除thing_type'size子句,向枚舉器添加或刪除值,更改數組中項目的數量,使用不同的值來初始化數組等等。這個代碼有什麼明顯的問題可以解釋這種行爲嗎?
什麼是第13行? (您的列表只有12行) –
對不起,我在粘貼時刪除了原來的一些空白行。第13行是text_io行。 – Kevin