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.
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);