diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index ecd508a66f8292a1eacee84465d188825f4d523f..364217d03db4e166f7f406dc78a0caac19998019 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -3231,11 +3231,24 @@ package body Sem_Aggr is Typ := Key_Type; elsif Present (Iterator_Specification (Comp)) then + -- Create a temporary scope to avoid some modifications from + -- escaping the Analyze call below. The original Tree will be + -- reanalyzed later. + + Ent := New_Internal_Entity + (E_Loop, Current_Scope, Sloc (Comp), 'L'); + Set_Etype (Ent, Standard_Void_Type); + Set_Parent (Ent, Parent (Comp)); + Push_Scope (Ent); + Copy := Copy_Separate_Tree (Iterator_Specification (Comp)); Id_Name := Chars (Defining_Identifier (Iterator_Specification (Comp))); - Analyze (Copy); + Preanalyze (Copy); + + End_Scope; + Typ := Etype (Defining_Identifier (Copy)); else