[Ada] Fix bug in if_expressions introduced by var-size nodes changes

Message ID 20210615102052.GA3106@adacore.com
State New
Headers show
Series
  • [Ada] Fix bug in if_expressions introduced by var-size nodes changes
Related show

Commit Message

Pierre-Marie de Rodat June 15, 2021, 10:20 a.m.
The old compiler (pre-var-size nodes) had code in Set_Then_Actions to
set the parent of the Then_Actions to point to the If_Expression, even
though this field is not syntactic.

This was missing from the new version.

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

gcc/ada/

	* gen_il-gen.adb (Setter_Needs_Parent): Add missing
	Then_Actions.  Fix self-contradictory comment.
	* exp_util.adb (Insert_Actions): Minor comment improvments.

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
@@ -7203,8 +7203,8 @@  package body Exp_Util is
 
                   --  Actions belong to the then expression, temporarily place
                   --  them as Then_Actions of the if expression. They will be
-                  --  moved to the proper place later when the if expression
-                  --  is expanded.
+                  --  moved to the proper place later when the if expression is
+                  --  expanded.
 
                   elsif N = ThenX then
                      if Present (Then_Actions (P)) then
@@ -7217,10 +7217,7 @@  package body Exp_Util is
 
                      return;
 
-                  --  Actions belong to the else expression, temporarily place
-                  --  them as Else_Actions of the if expression. They will be
-                  --  moved to the proper place later when the if expression
-                  --  is expanded.
+                  --  Else_Actions is treated the same as Then_Actions above
 
                   elsif N = ElseX then
                      if Present (Else_Actions (P)) then


diff --git a/gcc/ada/gen_il-gen.adb b/gcc/ada/gen_il-gen.adb
--- a/gcc/ada/gen_il-gen.adb
+++ b/gcc/ada/gen_il-gen.adb
@@ -479,13 +479,14 @@  package body Gen_IL.Gen is
       Node_Field_Types_Used, Entity_Field_Types_Used : Type_Set;
 
       Setter_Needs_Parent : Field_Set :=
-        (Actions | Expression | Else_Actions => True, others => False);
+        (Actions | Expression | Then_Actions | Else_Actions => True,
+         others => False);
       --  Set of fields where the setter should set the Parent. True for
       --  syntactic fields of type Node_Id and List_Id, but with some
-      --  exceptions. Expression and Else_Actions are syntactic AND semantic,
-      --  and the Parent is needed.  Default_Expression is also both, but the
-      --  Parent is not needed.  Else_Actions is not syntactic, but the Parent
-      --  is needed.
+      --  exceptions. Expression is syntactic AND semantic, and the Parent
+      --  is needed. Default_Expression is also both, but the Parent is not
+      --  needed. Then_Actions and Else_Actions are not syntactic, but the
+      --  Parent is needed.
 
       procedure Check_Completeness;
       --  Check that every type and field has been declared