Сборка G CC -Ada, синтаксическая ошибка компиляции s-excma c .adb с очень старым gnatmake - PullRequest
2 голосов
/ 18 февраля 2020

Я пытаюсь обновить наш 20-летний компилятор Ada, однако вам нужен Ada-компилятор для сборки некоторых частей GCC + Ada (9.2.0).

Гнатмейк - около 2000 года, и, возможно, это подзвон G CC 2.8.1. Вздох.

Я уже успешно построил несколько частей Ada из G CC, но этот файл 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

Итак, проблемная строка c в 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

Я не понимаю, что не так с этим кодом. Есть ли какая-нибудь замена синтаксиса Ada начала века, которую я могу использовать, чтобы скомпилировать эту часть G CC -Ada?

Я немного NOOB Ada, поэтому, пожалуйста, будьте осторожны.

РЕДАКТИРОВАТЬ: Похоже, что попытка "исправить" s-excmac.adb / s-excmac.ads является глупым поручением. Путь меньшего сопротивления состоит в том, чтобы загрузить предварительно собранный компилятор и начать сборку более позднего G CC из этого.

Ответы [ 3 ]

6 голосов
/ 18 февраля 2020

Если компилятор старше 2005 года, компиляция объявления Ada-2005 not null access будет проблемой.

Чтобы двигаться вперед, вы можете удалить слова "not null" и эту строку будет компилироваться и работать, но вы не получите желаемого поведения (прервать с исключением), если вы когда-нибудь передадите пустой тип доступа. Лучшим исправлением была бы процедура-обертка, которая явно проверяла и вызывала исключение или вызывала базовую C pro кашель пустую функцию в зависимости от ситуации.

Кроме того, могут быть другие Ada -2005 функций, которые также не будут компилироваться, поэтому лучшим выбором будет обновление компилятора.

5 голосов
/ 18 февраля 2020

Брайан прав насчет not null. Но в коде, вероятно, будет намного больше 2005-мов ...

Я считаю, что сопровождающие гарантируют только возможность сборки компилятора с использованием предыдущего выпуска, что подразумевает сборку G CC 3, используя это для построения G CC 4 и т. Д .; Вы можете пропустить релиз или два. Долгие дни впереди!

1 голос
/ 19 февраля 2020

Полагаю, строительство libgnat - последний шаг. Я имею в виду, что вам нужно собрать "new-g cc", используя старый, а затем с "new-g cc" вы соберете libgnat. В этом случае вы не получите эту ошибку.

...