[gcc r15-9812] ada: Fix infinite loop with aggregate in generic unit
Eric Botcazou
ebotcazou@gcc.gnu.org
Tue Jun 10 09:05:13 GMT 2025
https://gcc.gnu.org/g:8a4b72a2d99918d6bc315f2664a22457b9848ce7
commit r15-9812-g8a4b72a2d99918d6bc315f2664a22457b9848ce7
Author: Eric Botcazou <ebotcazou@adacore.com>
Date: Thu Mar 20 23:29:33 2025 +0100
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:
---
gcc/ada/sem_ch12.adb | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index d93788b779e9..02c7c3696e82 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;
More information about the Gcc-cvs
mailing list