我正在研究从另一家公司继承的传统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。
答案 0 :(得分:1)
Invalid_Data
始终是未初始化变量的标志。
我认为您正在使用-gnatVa
和pragma Initialize_Scalars
进行编译(已将其放入gnat.adc
文件或项目引用的文件中Builder'Global_Configuration_Pragmas
属性)。
在这种情况下,编译器尝试使用无效值(在有效范围之外)初始化变量,并添加其他检查。当检查失败时,它们会引发Invalid_Data
异常。
也许较旧的编译器总是初始化out
参数(但这会令人惊讶,它会如何选择默认值)?