diff mbox series

[Ada] Fix scope of index parameter inside a delta aggregate

Message ID 20201023082639.GA127519@adacore.com
State New
Headers show
Series [Ada] Fix scope of index parameter inside a delta aggregate | expand

Commit Message

Pierre-Marie de Rodat Oct. 23, 2020, 8:26 a.m. UTC
When resolving iterated_component_association that occurs within
delta_aggregate, we create an implicit loop which should act as a scope
for the index parameter entity. However, the name of this entity was
entered before pushing the scope of the implicit loop, so the index
parameter was visible outside of the delta_aggregate.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* sem_aggr.adb (Resolve_Delta_Array_Aggregate): Push scope of
	the implicit loop before entering name of the index parameter,
	not after; enter name no matter if the identifier has been
	decorated before.
diff mbox series

Patch

diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -3052,15 +3052,15 @@  package body Sem_Aggr is
             begin
                Set_Etype  (Ent, Standard_Void_Type);
                Set_Parent (Ent, Assoc);
+               Push_Scope (Ent);
 
                if No (Scope (Id)) then
-                  Enter_Name (Id);
                   Set_Etype (Id, Index_Type);
                   Set_Ekind (Id, E_Variable);
                   Set_Scope (Id, Ent);
                end if;
+               Enter_Name (Id);
 
-               Push_Scope (Ent);
                Analyze_And_Resolve
                  (New_Copy_Tree (Expression (Assoc)), Component_Type (Typ));
                End_Scope;