[Ada] Fix analysis of iterated component expression with null range

gcc/ada/

	* exp_aggr.adb (Gen_Loop): Analyze copy of the expression in the
	scope of the implicit loop with name of the index parameter
	visible.
This commit is contained in:
Piotr Trojanek 2020-08-07 09:13:08 +02:00 committed by Pierre-Marie de Rodat
parent a5476382a7
commit 4270e94541

View File

@ -53,6 +53,7 @@ with Sem; use Sem;
with Sem_Aggr; use Sem_Aggr;
with Sem_Aux; use Sem_Aux;
with Sem_Ch3; use Sem_Ch3;
with Sem_Ch8; use Sem_Ch8;
with Sem_Ch13; use Sem_Ch13;
with Sem_Eval; use Sem_Eval;
with Sem_Mech; use Sem_Mech;
@ -1954,7 +1955,30 @@ package body Exp_Aggr is
Expander_Mode_Save_And_Set (False);
Tcopy := New_Copy_Tree (Expr);
Set_Parent (Tcopy, N);
Analyze_And_Resolve (Tcopy, Component_Type (Etype (N)));
-- For iterated_component_association analyze and resolve
-- the expression with name of the index parameter visible.
-- To manipulate scopes, we use entity of the implicit loop.
if Is_Iterated_Component then
declare
Index_Parameter : constant Entity_Id :=
Defining_Identifier (Parent (Expr));
begin
Push_Scope (Scope (Index_Parameter));
Enter_Name (Index_Parameter);
Analyze_And_Resolve
(Tcopy, Component_Type (Etype (N)));
End_Scope;
end;
-- For ordinary component association, just analyze and
-- resolve the expression.
else
Analyze_And_Resolve (Tcopy, Component_Type (Etype (N)));
end if;
Expander_Mode_Restore;
end if;
end if;