From 66d4ff2658fc2d5115092da29249191feac75308 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Wed, 27 Jul 2022 09:37:05 +0200 Subject: [PATCH] [Ada] Create internal type for null array aggregate as an itype Internal type created for the null array aggregate of Ada 2022 was created as a temporary entity and then flagged as internal, but it is better to create this type directly as an itype. In particular, when the null array aggregate appears in a spec expression, its type declaration will not be attached to the AST. An itype will have Associated_Node_For_Itype, so that the context of the type can be recovered, which is what GNATprove does. gcc/ada/ * sem_aggr.adb (Resolve_Null_Array_Aggregate): Create internal type for the aggregate as an itype. --- gcc/ada/sem_aggr.adb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 8f20b3ac6fb4..c9c0a76ca48d 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -4088,7 +4088,10 @@ package body Sem_Aggr is Index : Node_Id; Lo, Hi : Node_Id; Constr : constant List_Id := New_List; - Subt : constant Entity_Id := Make_Temporary (Loc, 'S'); + Subt : constant Entity_Id := + Create_Itype (Ekind => E_Array_Subtype, + Related_Nod => N, + Suffix => 'S'); begin -- Create a constrained subtype with null dimensions @@ -4134,7 +4137,6 @@ package body Sem_Aggr is Make_Index_Or_Discriminant_Constraint (Loc, Constr))); Insert_Action (N, Decl); - Set_Is_Internal (Subt); Analyze (Decl); Set_Etype (N, Subt); Set_Compile_Time_Known_Aggregate (N); -- 2.47.3