[multiple changes]

2010-06-17  Ed Schonberg  <schonberg@adacore.com>

	* exp_ch6.adb (Expand_Call): Do not expand a call to an internal
	protected operation if the subprogram has been eliminated.

2010-06-17  Vincent Celier  <celier@adacore.com>

	* prj-nmsc.adb (Check_Library_Attributes): Allow the different
	directories associated with a library to be any directory when the
	library project is externally built.

2010-06-17  Vincent Celier  <celier@adacore.com>

	* make.adb (Check): If switch -m is used, deallocate the memory that
	may be allocated when computing the checksum.

From-SVN: r160907
This commit is contained in:
Arnaud Charlet 2010-06-17 15:00:26 +02:00
parent cfab0c49a4
commit 6f76a2575b
4 changed files with 111 additions and 81 deletions

View File

@ -1,3 +1,19 @@
2010-06-17 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Expand_Call): Do not expand a call to an internal
protected operation if the subprogram has been eliminated.
2010-06-17 Vincent Celier <celier@adacore.com>
* prj-nmsc.adb (Check_Library_Attributes): Allow the different
directories associated with a library to be any directory when the
library project is externally built.
2010-06-17 Vincent Celier <celier@adacore.com>
* make.adb (Check): If switch -m is used, deallocate the memory that
may be allocated when computing the checksum.
2010-06-17 Eric Botcazou <ebotcazou@adacore.com>
* g-socthi-mingw.adb (C_Recvmsg): Add 'use type' clause for C.size_t;

View File

@ -3095,12 +3095,14 @@ package body Exp_Ch6 is
-- In Ada 2005, this may be an indirect call to an access parameter that
-- is an access_to_subprogram. In that case the anonymous type has a
-- scope that is a protected operation, but the call is a regular one.
-- In either case do not expand call if subprogram is eliminated.
Scop := Scope (Subp);
if Nkind (N) /= N_Entry_Call_Statement
and then Is_Protected_Type (Scop)
and then Ekind (Subp) /= E_Subprogram_Type
and then not Is_Eliminated (Subp)
then
-- If the call is an internal one, it is rewritten as a call to the
-- corresponding unprotected subprogram.

View File

@ -1785,6 +1785,13 @@ package body Make is
Modified_Source := Time_Stamp_Mismatch (ALI, Read_Only);
-- To avoid using too much memory when switch -m is used, free the
-- memory allocated for the source file when computing the checksum.
if Minimal_Recompilation then
Sinput.P.Clear_Source_File_Table;
end if;
if Modified_Source /= No_File then
ALI := No_ALI_Id;

View File

@ -3631,99 +3631,103 @@ package body Prj.Nmsc is
"library directory { does not exist",
Lib_Dir.Location, Project);
elsif not Project.Externally_Built then
-- The library directory cannot be the same as the Object
-- directory.
elsif Project.Library_Dir.Name = Project.Object_Directory.Name then
Error_Msg
(Data.Flags,
"library directory cannot be the same " &
"as object directory",
Lib_Dir.Location, Project);
Project.Library_Dir := No_Path_Information;
if Project.Library_Dir.Name = Project.Object_Directory.Name then
Error_Msg
(Data.Flags,
"library directory cannot be the same " &
"as object directory",
Lib_Dir.Location, Project);
Project.Library_Dir := No_Path_Information;
else
declare
OK : Boolean := True;
Dirs_Id : String_List_Id;
Dir_Elem : String_Element;
Pid : Project_List;
begin
-- The library directory cannot be the same as a source
-- directory of the current project.
Dirs_Id := Project.Source_Dirs;
while Dirs_Id /= Nil_String loop
Dir_Elem := Data.Tree.String_Elements.Table (Dirs_Id);
Dirs_Id := Dir_Elem.Next;
if Project.Library_Dir.Name =
Path_Name_Type (Dir_Elem.Value)
then
Err_Vars.Error_Msg_File_1 :=
File_Name_Type (Dir_Elem.Value);
Error_Msg
(Data.Flags,
"library directory cannot be the same " &
"as source directory {",
Lib_Dir.Location, Project);
OK := False;
exit;
end if;
end loop;
if OK then
else
declare
OK : Boolean := True;
Dirs_Id : String_List_Id;
Dir_Elem : String_Element;
Pid : Project_List;
begin
-- The library directory cannot be the same as a source
-- directory of another project either.
-- directory of the current project.
Pid := Data.Tree.Projects;
Project_Loop : loop
exit Project_Loop when Pid = null;
Dirs_Id := Project.Source_Dirs;
while Dirs_Id /= Nil_String loop
Dir_Elem := Data.Tree.String_Elements.Table (Dirs_Id);
Dirs_Id := Dir_Elem.Next;
if Pid.Project /= Project then
Dirs_Id := Pid.Project.Source_Dirs;
Dir_Loop : while Dirs_Id /= Nil_String loop
Dir_Elem :=
Data.Tree.String_Elements.Table (Dirs_Id);
Dirs_Id := Dir_Elem.Next;
if Project.Library_Dir.Name =
Path_Name_Type (Dir_Elem.Value)
then
Err_Vars.Error_Msg_File_1 :=
File_Name_Type (Dir_Elem.Value);
Err_Vars.Error_Msg_Name_1 := Pid.Project.Name;
Error_Msg
(Data.Flags,
"library directory cannot be the same " &
"as source directory { of project %%",
Lib_Dir.Location, Project);
OK := False;
exit Project_Loop;
end if;
end loop Dir_Loop;
if Project.Library_Dir.Name =
Path_Name_Type (Dir_Elem.Value)
then
Err_Vars.Error_Msg_File_1 :=
File_Name_Type (Dir_Elem.Value);
Error_Msg
(Data.Flags,
"library directory cannot be the same " &
"as source directory {",
Lib_Dir.Location, Project);
OK := False;
exit;
end if;
end loop;
Pid := Pid.Next;
end loop Project_Loop;
end if;
if OK then
if not OK then
Project.Library_Dir := No_Path_Information;
-- The library directory cannot be the same as a
-- source directory of another project either.
elsif Current_Verbosity = High then
Pid := Data.Tree.Projects;
Project_Loop : loop
exit Project_Loop when Pid = null;
-- Display the Library directory in high verbosity
if Pid.Project /= Project then
Dirs_Id := Pid.Project.Source_Dirs;
Write_Attr
("Library directory",
Get_Name_String (Project.Library_Dir.Display_Name));
end if;
end;
Dir_Loop : while Dirs_Id /= Nil_String loop
Dir_Elem :=
Data.Tree.String_Elements.Table (Dirs_Id);
Dirs_Id := Dir_Elem.Next;
if Project.Library_Dir.Name =
Path_Name_Type (Dir_Elem.Value)
then
Err_Vars.Error_Msg_File_1 :=
File_Name_Type (Dir_Elem.Value);
Err_Vars.Error_Msg_Name_1 :=
Pid.Project.Name;
Error_Msg
(Data.Flags,
"library directory cannot be the same" &
" as source directory { of project %%",
Lib_Dir.Location, Project);
OK := False;
exit Project_Loop;
end if;
end loop Dir_Loop;
end if;
Pid := Pid.Next;
end loop Project_Loop;
end if;
if not OK then
Project.Library_Dir := No_Path_Information;
elsif Current_Verbosity = High then
-- Display the Library directory in high verbosity
Write_Attr
("Library directory",
Get_Name_String (Project.Library_Dir.Display_Name));
end if;
end;
end if;
end if;
end if;
@ -3811,8 +3815,9 @@ package body Prj.Nmsc is
Lib_ALI_Dir.Location, Project);
end if;
if Project.Library_ALI_Dir /= Project.Library_Dir then
if (not Project.Externally_Built) and then
Project.Library_ALI_Dir /= Project.Library_Dir
then
-- The library ALI directory cannot be the same as the
-- Object directory.