From 1a265e7824356359788dddf51b04d85ae4f7ff04 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Mon, 1 Aug 2011 11:04:40 +0200 Subject: [PATCH] [multiple changes] 2011-08-01 Ed Schonberg * sem_attr.adb (Analyze_Attribute, case 'Access): handle properly named access to protected subprograms in generic bodies. * sem_ch6.adb (Analyze_Subprogram_Declaration): If the context is a protected type, indicate that the convention of the subprogram is Convention_Protected, because it may be used in subsequent declarations within the protected declaration. 2011-08-01 Vincent Celier * mlib-prj.adb (Build_Library): Use "ada_" as the prefix for the "init" and "final" procedures when the name of the library is "ada", to avoid duplicate symbols "adainit" and "adafinal" in executables. From-SVN: r177002 --- gcc/ada/ChangeLog | 15 +++++++++++++++ gcc/ada/mlib-prj.adb | 29 +++++++++++++++++++---------- gcc/ada/sem_attr.adb | 6 ++++-- gcc/ada/sem_ch6.adb | 8 ++++++++ 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 46032fdff3b..101b285d6b7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2011-08-01 Ed Schonberg + + * sem_attr.adb (Analyze_Attribute, case 'Access): Handle properly named + access to protected subprograms in generic bodies. + * sem_ch6.adb (Analyze_Subprogram_Declaration): If the context is a + protected type, indicate that the convention of the subprogram is + Convention_Protected, because it may be used in subsequent declarations + within the protected declaration. + +2011-08-01 Vincent Celier + + * mlib-prj.adb (Build_Library): Use "ada_" as the prefix for the "init" + and "final" procedures when the name of the library is "ada", to avoid + duplicate symbols "adainit" and "adafinal" in executables. + 2011-08-01 Ed Schonberg * sem_attr.adb (Analyze_Attribute, case 'Result): Handle properly a diff --git a/gcc/ada/mlib-prj.adb b/gcc/ada/mlib-prj.adb index 8c0d4e1b06f..8feffc019c6 100644 --- a/gcc/ada/mlib-prj.adb +++ b/gcc/ada/mlib-prj.adb @@ -862,7 +862,7 @@ package body MLib.Prj is Arguments := new String_List (1 .. Initial_Argument_Max); end if; - -- Add "-n -o b~.adb (b__.adb on VMS) -L" + -- Add "-n -o b~.adb (b__.adb on VMS) -L_" Argument_Number := 2; Arguments (1) := No_Main; @@ -875,7 +875,17 @@ package body MLib.Prj is Add_Argument (B_Start.all & Get_Name_String (For_Project.Library_Name) & ".adb"); - Add_Argument ("-L" & Get_Name_String (For_Project.Library_Name)); + + -- Make sure that the init procedure is never "adainit" + + Get_Name_String (For_Project.Library_Name); + + if Name_Buffer (1 .. Name_Len) = "ada" then + Add_Argument ("-Lada_"); + else + Add_Argument + ("-L" & Get_Name_String (For_Project.Library_Name)); + end if; if For_Project.Lib_Auto_Init and then SALs_Use_Constructors then Add_Argument (Auto_Initialize); @@ -950,16 +960,15 @@ package body MLib.Prj is then if Check_Project (Unit.File_Names (Impl).Project) then if Unit.File_Names (Spec) = null then - declare - Src_Ind : Source_File_Index; - - begin - Src_Ind := Sinput.P.Load_Project_File - (Get_Name_String - (Unit.File_Names (Impl).Path.Name)); - -- Add the ALI file only if it is not a subunit + -- Add the ALI file only if it is not a subunit + declare + Src_Ind : constant Source_File_Index := + Sinput.P.Load_Project_File + (Get_Name_String + (Unit.File_Names (Impl).Path.Name)); + begin if not Sinput.P.Source_File_Is_Subunit (Src_Ind) then diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 734c1a723c6..ea00352ec6f 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -7837,14 +7837,16 @@ package body Sem_Attr is if Ekind_In (Btyp, E_Access_Subprogram_Type, E_Anonymous_Access_Subprogram_Type, + E_Access_Protected_Subprogram_Type, E_Anonymous_Access_Protected_Subprogram_Type) then -- Deal with convention mismatch - if Convention (Btyp) /= Convention (Entity (P)) then + if Convention (Designated_Type (Btyp)) /= + Convention (Entity (P)) + then Error_Msg_FE ("subprogram & has wrong convention", P, Entity (P)); - Error_Msg_FE ("\does not match convention of access type &", P, Btyp); diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index ab3f26b7a8e..625fc4e43d0 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -2929,6 +2929,14 @@ package body Sem_Ch6 is Write_Eol; end if; + if Is_Protected_Type (Current_Scope) then + + -- Indicate that this is a protected operation, because it may be + -- used in subsequent declarations within the protected type. + + Set_Convention (Designator, Convention_Protected); + end if; + List_Inherited_Pre_Post_Aspects (Designator); Analyze_Aspect_Specifications (N, Designator, Aspect_Specifications (N)); end Analyze_Subprogram_Declaration; -- 2.30.2