diff options
author | Steve Baird <baird@adacore.com> | 2021-05-11 14:27:09 -0700 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-07-06 14:46:56 +0000 |
commit | c6d8890c7d1e717c2f8ed5f2b04ca5a9b26cdfc1 (patch) | |
tree | 708d70fb546c243aa42842a0bd11b03b5d735730 | |
parent | 6dff0d21e56d15dafc683dd69c6a9fbf3f1e7dfc (diff) | |
download | gcc-c6d8890c7d1e717c2f8ed5f2b04ca5a9b26cdfc1.zip gcc-c6d8890c7d1e717c2f8ed5f2b04ca5a9b26cdfc1.tar.gz gcc-c6d8890c7d1e717c2f8ed5f2b04ca5a9b26cdfc1.tar.bz2 |
[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.
-rw-r--r-- | gcc/ada/exp_ch5.adb | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 3e65084..2559e56 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 |