我正在尝试更新我们已有 20 年历史的 Ada 编译器,但是您需要一个 Ada 编译器来构建 GCC+Ada (9.2.0) 的某些部分。
gnatmake 大约是 2000 年,它可能子调用 GCC 2.8.1。 叹。
我已经成功构建了 GCC 的几个 Ada 部分,但是这个libgnat/文件让我望而却步:
编译libgnat/s-excmac.adb:
$ gnatmake s-excmac.adb
gcc -c -gnatpg s-excmac.adb
s-excmac.ads:134:44: identifier expected
gnatmake: "s-excmac.adb" compilation error
Run Code Online (Sandbox Code Playgroud)
所以有问题的行s-excmac.ads是:
type GCC_Exception_Access is access all Unwind_Exception;
-- Pointer to a GCC exception
procedure Unwind_DeleteException (Excp : not null GCC_Exception_Access ); -- <-- THIS ONE!
pragma Import (C, Unwind_DeleteException, "_Unwind_DeleteException");
-- Procedure to free any GCC exception
Run Code Online (Sandbox Code Playgroud)
我不明白这段代码有什么问题。是否有一些世纪之交的 Ada 语法替换我可以用来编译 GCC-Ada 的这一部分?
我有点像 Ada NOOB,所以请保持温柔。
编辑:似乎试图“修复” s-excmac.adb/s-excmac.ads是一个傻瓜的差事。阻力较小的路径是下载一个预先构建的编译器,然后从中开始构建后来的 GCC。
如果编译器早于 2005,编译 Ada-2005not null access声明将是一个问题。
继续前进,您可以删除单词“ not null”,该行将编译并运行,但如果您传入空访问类型,则不会获得所需的行为(异常中止)。一个更好的修复方法是一个包装程序,它明确检查,并在适当的时候引发异常或调用底层的 C pro咳空函数。
此外,可能还有其他 Ada-2005 功能也无法编译,因此更好的选择是升级编译器。
布莱恩是对的not null。但是代码中可能有更多的 2005-isms ......
我相信维护者只会保证能够使用以前的版本构建编译器,这意味着构建 GCC 3,使用它构建 GCC 4,依此类推;您可能可以跳过一两个版本。未来的漫长日子!
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |