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.
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