Gnat编译器升级导致出现与enum相关的Constraint_Error

时间:2014-09-29 23:18:38

标签: enums ada

我正在研究从另一家公司继承的传统Ada 95项目。我最近将编译器从Gnat 3.13a1升级到Gnat 4.7.4。程序仍在编译,但其中一个任务因Constraint_Error而崩溃。

Process_Ua(Buffer, Msg_Kind);

Tr_Log5("MSG KIND IS: " & Message_Received_Type'Image(Msg_Kind));

Constraint_Error出现在上面的第二行,其中包含消息" Invalid Data。" Msg_Kind的类型为Message_Received_Type(这是一个枚举类型),它在本子程序开始时已正确初始化,因此在分配任何不属于的内容时,我无法理解数据如何无效。将Message_Received_Type发送到Msg_Kind会导致发生Constraint_Error。

1 个答案:

答案 0 :(得分:1)

Invalid_Data始终是未初始化变量的标志。

我认为您正在使用-gnatVapragma Initialize_Scalars进行编译(已将其放入gnat.adc文件或项目引用的文件中Builder'Global_Configuration_Pragmas属性)。

在这种情况下,编译器尝试使用无效值(在有效范围之外)初始化变量,并添加其他检查。当检查失败时,它们会引发Invalid_Data异常。

也许较旧的编译器总是初始化out参数(但这会令人惊讶,它会如何选择默认值)?