aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-08-01 11:04:40 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-08-01 11:04:40 +0200
commit1a265e7824356359788dddf51b04d85ae4f7ff04 (patch)
tree91ba915ac405b8e5b1f9aeb7989d7fd0795e94bb
parent67e28ef818ad694185e3738dad037864d2c51240 (diff)
downloadgcc-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/ChangeLog15
-rw-r--r--gcc/ada/mlib-prj.adb29
-rw-r--r--gcc/ada/sem_attr.adb6
-rw-r--r--gcc/ada/sem_ch6.adb8
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;