From: charlet Date: Mon, 1 Aug 2011 09:04:40 +0000 (+0000) Subject: 2011-08-01 Ed Schonberg X-Git-Tag: upstream/4.9.2~18972 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a1470075ffb69381240f59b17d18a37b273c28d4;p=platform%2Fupstream%2Flinaro-gcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177002 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 46032fd..101b285 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,20 @@ 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 quantified expression that appears within a postcondition and uses the Ada2012 'Result attribute. diff --git a/gcc/ada/mlib-prj.adb b/gcc/ada/mlib-prj.adb index 8c0d4e1..8feffc0 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 734c1a7..ea00352 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 ab3f26b..625fc4e 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;