From: Arnaud Charlet Date: Fri, 31 Jan 2020 20:53:42 +0000 (-0500) Subject: [Ada] AI12-0207 Convention of anonymous access types X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a9969d7feb35306ba82bc5d605d9c8c48f1c8271;p=gcc.git [Ada] AI12-0207 Convention of anonymous access types 2020-06-05 Arnaud Charlet gcc/ada/ * sem_prag.adb (Set_Convention_From_Pragma): Set the convention of anonymous access array components. --- diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 419538d7c68..0848e1e6979 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -8020,26 +8020,38 @@ package body Sem_Prag is -- For the case of a record base type, also set the convention of -- any anonymous access types declared in the record which do not -- currently have a specified convention. + -- Similarly for an array base type and anonymous access types + -- components. - if Is_Record_Type (E) and then Is_Base_Type (E) then - declare - Comp : Node_Id; + if Is_Base_Type (E) then + if Is_Record_Type (E) then + declare + Comp : Node_Id; - begin - Comp := First_Component (E); - while Present (Comp) loop - if Present (Etype (Comp)) - and then Ekind_In (Etype (Comp), - E_Anonymous_Access_Type, - E_Anonymous_Access_Subprogram_Type) - and then not Has_Convention_Pragma (Comp) - then - Set_Convention (Comp, C); - end if; + begin + Comp := First_Component (E); + while Present (Comp) loop + if Present (Etype (Comp)) + and then + Ekind_In (Etype (Comp), + E_Anonymous_Access_Type, + E_Anonymous_Access_Subprogram_Type) + and then not Has_Convention_Pragma (Comp) + then + Set_Convention (Comp, C); + end if; - Next_Component (Comp); - end loop; - end; + Next_Component (Comp); + end loop; + end; + + elsif Is_Array_Type (E) + and then Ekind_In (Component_Type (E), + E_Anonymous_Access_Type, + E_Anonymous_Access_Subprogram_Type) + then + Set_Convention (Designated_Type (Component_Type (E)), C); + end if; end if; -- Deal with incomplete/private type case, where underlying type