From: Bob Duff Date: Mon, 18 Aug 2025 18:35:35 +0000 (-0400) Subject: ada: Fix regression in Root_Type X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61645a4f0520a9847adccd37555e3390ef7a4ca6;p=thirdparty%2Fgcc.git 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 --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index d84e562853c..450d4c36b21 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