aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2021-05-11 14:27:09 -0700
committerPierre-Marie de Rodat <derodat@adacore.com>2021-07-06 14:46:56 +0000
commitc6d8890c7d1e717c2f8ed5f2b04ca5a9b26cdfc1 (patch)
tree708d70fb546c243aa42842a0bd11b03b5d735730
parent6dff0d21e56d15dafc683dd69c6a9fbf3f1e7dfc (diff)
downloadgcc-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.adb14
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