+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
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;
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);
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
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);
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;