[Ada] Fix bug in casing on composite values with -gnatX

gcc/ada/

	* exp_ch5.adb
	(Expand_N_Case_Statement.Expand_General_Case_Statement.Pattern_Match):
	When generating an equality test for a statically known discrete
	value, only generate the numeric value if the discrete type is
	not an enumeration type.  If it is an enumeration type, then
	call Get_Enum_Lit_From_Pos instead.
This commit is contained in:
Steve Baird 2021-05-11 14:27:09 -07:00 committed by Pierre-Marie de Rodat
parent 6dff0d21e5
commit c6d8890c7d

View File

@ -3384,9 +3384,17 @@ package body Exp_Ch5 is
and then Is_Discrete_Type (Etype (Pattern))
and then Compile_Time_Known_Value (Pattern)
then
return Make_Op_Eq (Loc,
Object,
Make_Integer_Literal (Loc, Expr_Value (Pattern)));
declare
Val : Node_Id;
begin
if Is_Enumeration_Type (Etype (Pattern)) then
Val := Get_Enum_Lit_From_Pos
(Etype (Pattern), Expr_Value (Pattern), Loc);
else
Val := Make_Integer_Literal (Loc, Expr_Value (Pattern));
end if;
return Make_Op_Eq (Loc, Object, Val);
end;
end if;
case Nkind (Pattern) is