ada: Compiler crash on early alignment clause
commit756e05d1565482e7b24f9cf51ffcfeced5a9d91c
authorBob Duff <duff@adacore.com>
Wed, 18 Oct 2023 13:54:06 +0000 (18 09:54 -0400)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 7 Nov 2023 09:15:05 +0000 (7 10:15 +0100)
tree59bfc98e0a372bd11abe8c7656451f92a507cf84
parent09e5e68c07c8cf6e30af0f7553c2565bbbed49b4
ada: Compiler crash on early alignment clause

This patch fixes a bug: if "for T'Alignment use..." is followed
by "for T use (<enum rep>);" the compiler crashes. A workaround is
to move the alignment clause after the enumeration rep clause.

gcc/ada/

* sem_ch13.ads (Set_Enum_Esize): Do not set alignment.
* sem_ch13.adb (Set_Enum_Esize): Do not set alignment. Archaeology
seems to show that this line of code dates from when "Alignment =
0" meant "the Alignment is not known at compile time" and "the
Alignment is not yet known at compile time" as well as "the
Alignment is zero". In any case, it seems to be unnecessary, and
in this case harmful, because gigi would crash. Alignment_Clause
is set (because there is one), so gigi would query the Alignment,
but Alignment was destroyed.
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch13.ads