https://gcc.gnu.org/g:61645a4f0520a9847adccd37555e3390ef7a4ca6

commit r16-3776-g61645a4f0520a9847adccd37555e3390ef7a4ca6
Author: Bob Duff <d...@adacore.com>
Date:   Mon Aug 18 14:35:35 2025 -0400

    ada: Fix regression in Root_Type
    
    Previous change, "Make pp and friends more robust (base type only)"
    introduced a bug in Root_Type. Etype (T) can, in fact, be Empty
    (but only in case of errors.) This patch fixes it.
    
    gcc/ada/ChangeLog:
    
            * einfo-utils.adb (Root_Type): Deal with missing Etype.
            (Root_Type_If_Set): Likewise.

Diff:
---
 gcc/ada/einfo-utils.adb | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb
index d84e562853cc..450d4c36b211 100644
--- a/gcc/ada/einfo-utils.adb
+++ b/gcc/ada/einfo-utils.adb
@@ -2585,7 +2585,11 @@ package body Einfo.Utils is
             loop
                Etyp := Etype (T);
 
-               exit when T = Etyp
+               if No (Etyp) then
+                  Check_Error_Detected;
+               end if;
+
+               exit when No (Etyp) or else T = Etyp
                  or else
                    (Is_Private_Type (T) and then Etyp = Full_View (T))
                  or else
@@ -2609,6 +2613,10 @@ package body Einfo.Utils is
       end return;
    end Root_Type;
 
+   ----------------------
+   -- Root_Type_If_Set --
+   ----------------------
+
    function Root_Type_If_Set (Id : E) return Opt_N_Entity_Id is
       Etyp : Entity_Id;
 
@@ -2620,12 +2628,7 @@ package body Einfo.Utils is
             loop
                Etyp := Etype (T);
 
-               if No (Etyp) then
-                  T := Empty;
-                  exit;
-               end if;
-
-               exit when T = Etyp
+               exit when No (Etyp) or else T = Etyp
                  or else
                    (Is_Private_Type (T) and then Etyp = Full_View (T))
                  or else

Reply via email to