From: Piotr Trojanek Date: Fri, 7 Aug 2020 07:13:08 +0000 (+0200) Subject: [Ada] Fix analysis of iterated component expression with null range X-Git-Tag: basepoints/gcc-12~4087 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4270e94541bb865334849677b7c887c7eceb8353;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index bbb4f8894547..6c274a2bba4e 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -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;