https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70017
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-03-01
Ever confirmed|0 |1
--- Comment #2 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
The expected behavior is that a Storage_Error be raised in response to the
stack overflow and that it be caught by the handler attached to the OBJ_DCL
block:
END OBJ_DCL;
EXCEPTION
WHEN STORAGE_ERROR =>
COMMENT ("STORAGE_ERROR RAISED WHEN DECLARING " &
"TWO PACKED BOOLEAN ARRAYS WITH " &
"INTEGER'LAST + 3 COMPONENTS");
WHEN CONSTRAINT_ERROR =>
COMMENT ("CONSTRAINT_ERROR RAISED WHEN DECLARING " &
"TWO PACKED BOOLEAN ARRAYS WITH " &
"INTEGER'LAST + 3 COMPONENTS");
WHEN OTHERS =>
FAILED ("SOME EXCEPTION RAISED - 3");
If you remove the handler like in the reduced testcase, the Storage_Error
cannot be caught and will terminate the program as per the language semantics.
However, on s390 stack overflow detection is emulated (by _gnat_stack_check) at
the moment so this cannot really work.
The first thing to do is to change Stack_Check_Probes to True in
system-linux-s390.ads and system-linux-s390x.ads to enable real stack checking.
You may have to enhance the back-end as a result, see the Standard Names
subsection of the Machine Descriptions section of the internal manual.