Я не уверен, является ли это ошибкой в моей версии gcc (4.8.5) или gprbuild (2.2.0), но когда я пытаюсь скомпилировать проект, появляется определенная функция, тело которой вызывает сбой компилятора с STORAGE_ERROR
. Когда я строю с -cargs -v
, я вижу, что gnatl -quiet ...
- это команда, которая выводится последней перед сбоем.
Рассматриваемая функция создает информативную строку из тега, принадлежащего определенной иерархии типов. Это выглядит примерно так:
function Tag_To_String (From : Ada.Tags.Tag) return String is (
if From = A'Tag then "This is tag A"
elsif From = B'Tag then "This is tag B"
-- ...
elsif From = Z'Tag then "This is tag Z"
else "");
Тогда как я могу заставить его успешно скомпилироваться, если я изменю это тело на:
function Tag_To_String (From : Ada.Tags.Tag) return String is ("");
Я получаю именно такую ошибку:
gcc -c -gnat12 sourcefile.adb
raised STORAGE_ERROR : stack overflow or erroneous memory access
gprbuild: *** compilation phase failed
Есть идеи, почему gcc не может скомпилировать эту функцию?