diff mbox series

[Ada] Look at Others_Discrete_Choices for N_Others_Choice

Message ID 20210617143310.GA9155@adacore.com
State New
Headers show
Series [Ada] Look at Others_Discrete_Choices for N_Others_Choice | expand

Commit Message

Pierre-Marie de Rodat June 17, 2021, 2:33 p.m. UTC
When seeing if we have any static predicates in an "others" choice for a
case statement, look at and possibly update choices
Others_Discrete_Choices.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* exp_util.adb (Expand_Static_Predicates_In_Choices): Handle
	Others_Discrete_Choices in N_Others_Choice.
diff mbox series

Patch

diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -5322,7 +5322,7 @@  package body Exp_Util is
    procedure Expand_Static_Predicates_In_Choices (N : Node_Id) is
       pragma Assert (Nkind (N) in N_Case_Statement_Alternative | N_Variant);
 
-      Choices : constant List_Id := Discrete_Choices (N);
+      Choices : List_Id := Discrete_Choices (N);
 
       Choice : Node_Id;
       Next_C : Node_Id;
@@ -5330,6 +5330,13 @@  package body Exp_Util is
       C      : Node_Id;
 
    begin
+      --  If this is an "others" alternative, we need to process any static
+      --  predicates in its Others_Discrete_Choices.
+
+      if Nkind (First (Choices)) = N_Others_Choice then
+         Choices := Others_Discrete_Choices (First (Choices));
+      end if;
+
       Choice := First (Choices);
       while Present (Choice) loop
          Next_C := Next (Choice);