我们最近更新了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