]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Refine sanity check in Insert_Actions
authorRonan Desplanques <desplanques@adacore.com>
Tue, 10 Jun 2025 10:51:26 +0000 (12:51 +0200)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Thu, 3 Jul 2025 08:16:28 +0000 (10:16 +0200)
Insert_Actions performs a sanity check when it goes through an
expression with actions while going up the three. That check was not
perfectly right before this patch and spuriously failed when inserting
range checks in some situation. This patch makes the check more robust.

gcc/ada/ChangeLog:

* exp_util.adb (Insert_Actions): Fix check.

gcc/ada/exp_util.adb

index 90778910e997117237a2341ae1db236d88d64941..4f98779040520367982bc7ba04f264c24fa27e5f 100644 (file)
@@ -8167,21 +8167,21 @@ package body Exp_Util is
             --  never climb up as far as the N_Expression_With_Actions itself.
 
             when N_Expression_With_Actions =>
-               if N = Expression (P) then
-                  if Is_Empty_List (Actions (P)) then
-                     Append_List_To (Actions (P), Ins_Actions);
-                     Analyze_List (Actions (P));
-                  else
-                     Insert_List_After_And_Analyze
-                       (Last (Actions (P)), Ins_Actions);
-                  end if;
-
-                  return;
+               if Is_List_Member (N) and then List_Containing (N) = Actions (P)
+               then
+                  raise Program_Error;
+               end if;
 
+               if Is_Empty_List (Actions (P)) then
+                  Append_List_To (Actions (P), Ins_Actions);
+                  Analyze_List (Actions (P));
                else
-                  raise Program_Error;
+                  Insert_List_After_And_Analyze
+                    (Last (Actions (P)), Ins_Actions);
                end if;
 
+               return;
+
             --  Case of appearing in the condition of a while expression or
             --  elsif. We insert the actions into the Condition_Actions field.
             --  They will be moved further out when the while loop or elsif