From: Steve Baird Date: Tue, 11 May 2021 21:27:09 +0000 (-0700) Subject: [Ada] Fix bug in casing on composite values with -gnatX X-Git-Tag: basepoints/gcc-13~6242 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6d8890c7d1e717c2f8ed5f2b04ca5a9b26cdfc1;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 3e65084c65f6..2559e56b90a1 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -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