diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-01 11:04:40 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-01 11:04:40 +0200 |
commit | 1a265e7824356359788dddf51b04d85ae4f7ff04 (patch) | |
tree | 91ba915ac405b8e5b1f9aeb7989d7fd0795e94bb | |
parent | 67e28ef818ad694185e3738dad037864d2c51240 (diff) | |
download | gcc-1a265e7824356359788dddf51b04d85ae4f7ff04.zip gcc-1a265e7824356359788dddf51b04d85ae4f7ff04.tar.gz gcc-1a265e7824356359788dddf51b04d85ae4f7ff04.tar.bz2 |
[multiple changes]
2011-08-01 Ed Schonberg <schonberg@adacore.com>
* 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 <celier@adacore.com>
* 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
-rw-r--r-- | gcc/ada/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/ada/mlib-prj.adb | 29 | ||||
-rw-r--r-- | gcc/ada/sem_attr.adb | 6 | ||||
-rw-r--r-- | gcc/ada/sem_ch6.adb | 8 |
4 files changed, 46 insertions, 12 deletions
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 <schonberg@adacore.com> + * 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 <celier@adacore.com> + + * 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 <schonberg@adacore.com> + * 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~<lib>.adb (b__<lib>.adb on VMS) -L<lib>" + -- Add "-n -o b~<lib>.adb (b__<lib>.adb on VMS) -L<lib>_" 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; |