https://gcc.gnu.org/g:33541b880694fedb901cf8f38b2be77e4c429068
commit r15-457-g33541b880694fedb901cf8f38b2be77e4c429068 Author: Steve Baird <ba...@adacore.com> Date: Fri Feb 9 15:08:51 2024 -0800 ada: Better error message for bad general case statements If -gnatX0 is specified, we allow case statements with a selector expression of a record or array type, but not of a private type. If the selector expression is of a private type then we should generate an appropriate error message instead of a bugbox. gcc/ada/ * sem_ch5.adb (Analyze_Case_Statement): Emit a message and return early in the case where general case statements are allowed but the selector expression is of a private type. This is done to avoid a bugbox. Diff: --- gcc/ada/sem_ch5.adb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 2677a2c5a1cc..65370ebfe7ea 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -1497,6 +1497,15 @@ package body Sem_Ch5 is Resolve (Exp, Etype (Exp)); Exp_Type := Etype (Exp); Is_General_Case_Statement := True; + if not (Is_Record_Type (Exp_Type) or Is_Array_Type (Exp_Type)) then + Error_Msg_N + ("selecting expression of general case statement " & + "must be a record or an array", + Exp); + + -- Avoid cascading errors + return; + end if; else Analyze_And_Resolve (Exp, Any_Discrete); Exp_Type := Etype (Exp);