From: Eric Botcazou Date: Thu, 20 Mar 2025 22:29:33 +0000 (+0100) Subject: ada: Fix infinite loop with aggregate in generic unit X-Git-Tag: releases/gcc-15.2.0~389 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8a4b72a2d99918d6bc315f2664a22457b9848ce7;p=thirdparty%2Fgcc.git ada: Fix infinite loop with aggregate in generic unit Root_Type does not return the same type for the private and the full view of a derived private tagged type when both derive from an interface type. gcc/ada/ChangeLog: * sem_ch12.adb (Copy_Generic_Node): Do not call Root_Type to find the root type of an aggregate of a derived tagged type. --- diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index d93788b779e..02c7c3696e8 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -9340,9 +9340,6 @@ package body Sem_Ch12 is and then Nkind (Ancestor_Type (N)) in N_Entity then declare - Root_Typ : constant Entity_Id := - Root_Type (Ancestor_Type (N)); - Typ : Entity_Id := Ancestor_Type (N); begin @@ -9351,7 +9348,7 @@ package body Sem_Ch12 is Switch_View (Typ); end if; - exit when Typ = Root_Typ; + exit when Etype (Typ) = Typ; Typ := Etype (Typ); end loop;