将一些旧代码移植到较新的 CentOs Linux 机器。我使用带有几个标志的 linux gnat:
Default_Switches ("ada") use ("-fstack-check", "-g", "-gnatVr", "-gnato", "-gnatE", "-gnatwmuv", "-gnata", "-m32");
Run Code Online (Sandbox Code Playgroud)
我有 gnat 版本:
gcc-gnat.i686 4.8.5-11.el7
Run Code Online (Sandbox Code Playgroud)
所以这些是前提条件。我现在有一个肯定可以工作的自写存储管理器,它被称为
St_Wa.Alloc(StoragePool, BitSize)
Run Code Online (Sandbox Code Playgroud)
所以现在我的问题是,说实话,我真的不明白编译器失败的原因,所以我将非常感谢您详细解释为什么它不起作用!
function AllocMem(StoragePool : in St_Wa.Mem_Pool_Type;
Option: in Option_Type)
return Option_Ref is
subtype New_Type is Option_Type (Option.Kind);
New_Option : New_Type;
for New_Option use at St_Wa.Alloc( StoragePool => StoragePool,
BitSize => New_Type'Size)
begin
Bl_Bl.Move( ... sth happens here ... )
return Pointer(New_Option'Address);
end AllocMem;
Run Code Online (Sandbox Code Playgroud)
然而:
type Option_Type ( Kind : Option_Kind_Type := Marker) is
record
Next …Run Code Online (Sandbox Code Playgroud)