https://gcc.gnu.org/g:bbcf4d2ab6f4d4e97605a2754051fd53c9fb22c2

commit r15-6156-gbbcf4d2ab6f4d4e97605a2754051fd53c9fb22c2
Author: Ronan Desplanques <desplanq...@adacore.com>
Date:   Thu Nov 21 15:32:47 2024 +0100

    ada: Defend against risk of infinite loop
    
    A recently fixed bug caused an infinite loop when assertions were not
    checked. With assertions checked, the symptom was just an internal
    error caused by an assertion failure. This patch makes it so that if
    another bug ever causes the same condition to fail, there will never be
    an infinite loop with any assertion policy.
    
    gcc/ada/ChangeLog:
    
            * sem_ch3.adb (Access_Subprogram_Declaration): Replace assertion 
with
            more defensive code.

Diff:
---
 gcc/ada/sem_ch3.adb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 11f69db21dc2..5df949aa6673 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -1100,7 +1100,9 @@ package body Sem_Ch3 is
                                 | N_Protected_Type_Declaration
       loop
          D_Ityp := Parent (D_Ityp);
-         pragma Assert (D_Ityp /= Empty);
+         if No (D_Ityp) then
+            raise Program_Error;
+         end if;
       end loop;
 
       Set_Associated_Node_For_Itype (Desig_Type, D_Ityp);

Reply via email to