From: Ed Schonberg Date: Sat, 28 Nov 2020 15:19:47 +0000 (-0500) Subject: [Ada] Handle iterator filters on loop specifications over containers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d1d0c4c80058923fbf681d1d80ff90eeb7883949;p=gcc.git [Ada] Handle iterator filters on loop specifications over containers gcc/ada/ * sem_ch5.adb (Analyze_Iterator_Specification): If iterator filter is present, preanalyze filter without expansion. (Analyze_Loop_Parameter_Specification): When loop_Parameter_Specification is rewritten as Iterator_Specification, transfer Iterator_Filter if present. --- diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index b13635691d5..653e3159902 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -2620,7 +2620,10 @@ package body Sem_Ch5 is end if; if Present (Iterator_Filter (N)) then - Analyze_And_Resolve (Iterator_Filter (N), Standard_Boolean); + -- Preanalyze the filter. Expansion will take place when enclosing + -- loop is expanded. + + Preanalyze_And_Resolve (Iterator_Filter (N), Standard_Boolean); end if; end Analyze_Iterator_Specification; @@ -3017,6 +3020,9 @@ package body Sem_Ch5 is begin Set_Iterator_Specification (Scheme, I_Spec); Set_Loop_Parameter_Specification (Scheme, Empty); + Set_Iterator_Filter (I_Spec, + Relocate_Node (Iterator_Filter (N))); + Analyze_Iterator_Specification (I_Spec); -- In a generic context, analyze the original domain of