Commit b7f7dab2 by Arnaud Charlet

[multiple changes]

2012-07-09  Robert Dewar  <dewar@adacore.com>

	* freeze.adb, prj-util.adb, prj-util.ads, sem_ch13.adb: Minor
	reformatting.

2012-07-09  Gary Dismukes  <dismukes@adacore.com>

	* sem_cat.adb (Check_Categorization_Dependencies):
	Allow dependence of both Remote_Types and Remote_Call_Interface
	declarations (not just Remote_Types units) on preelaborated
	units, but require that the dependence be made via a private
	with_clause. Issue a specialized error message.

From-SVN: r189371
parent c1a9b6df
2012-07-09 Robert Dewar <dewar@adacore.com>
* freeze.adb, prj-util.adb, prj-util.ads, sem_ch13.adb: Minor
reformatting.
2012-07-09 Gary Dismukes <dismukes@adacore.com>
* sem_cat.adb (Check_Categorization_Dependencies):
Allow dependence of both Remote_Types and Remote_Call_Interface
declarations (not just Remote_Types units) on preelaborated
units, but require that the dependence be made via a private
with_clause. Issue a specialized error message.
2012-07-09 Pascal Obry <obry@adacore.com> 2012-07-09 Pascal Obry <obry@adacore.com>
* prj-util.adb, prj-util.ads (For_Interface_Sources): New routine. * prj-util.adb, prj-util.ads (For_Interface_Sources): New routine.
......
...@@ -42,7 +42,7 @@ with Nmake; use Nmake; ...@@ -42,7 +42,7 @@ with Nmake; use Nmake;
with Opt; use Opt; with Opt; use Opt;
with Restrict; use Restrict; with Restrict; use Restrict;
with Rident; use Rident; with Rident; use Rident;
with Rtsfind; use Rtsfind; with Rtsfind; use Rtsfind;
with Sem; use Sem; with Sem; use Sem;
with Sem_Aux; use Sem_Aux; with Sem_Aux; use Sem_Aux;
with Sem_Cat; use Sem_Cat; with Sem_Cat; use Sem_Cat;
...@@ -1906,6 +1906,7 @@ package body Freeze is ...@@ -1906,6 +1906,7 @@ package body Freeze is
Comp := First_Entity (Rec); Comp := First_Entity (Rec);
Prev := Empty; Prev := Empty;
while Present (Comp) loop while Present (Comp) loop
-- Deal with delayed aspect specifications for components. The -- Deal with delayed aspect specifications for components. The
-- analysis of the aspect is required to be delayed to the freeze -- analysis of the aspect is required to be delayed to the freeze
-- point, thus we analyze the pragma or attribute definition -- point, thus we analyze the pragma or attribute definition
...@@ -1914,7 +1915,7 @@ package body Freeze is ...@@ -1914,7 +1915,7 @@ package body Freeze is
-- correspond to pragma/attribute definition clause. -- correspond to pragma/attribute definition clause.
if Ekind (Comp) = E_Component if Ekind (Comp) = E_Component
and then Has_Delayed_Aspects (Comp) and then Has_Delayed_Aspects (Comp)
then then
Push_Scope (Rec); Push_Scope (Rec);
......
...@@ -398,7 +398,8 @@ package body Prj.Util is ...@@ -398,7 +398,8 @@ package body Prj.Util is
--------------------------- ---------------------------
procedure For_Interface_Sources procedure For_Interface_Sources
(Tree : Project_Tree_Ref; Project : Project_Id) (Tree : Project_Tree_Ref;
Project : Project_Id)
is is
use Ada; use Ada;
use type Ada.Containers.Count_Type; use type Ada.Containers.Count_Type;
...@@ -406,7 +407,7 @@ package body Prj.Util is ...@@ -406,7 +407,7 @@ package body Prj.Util is
package Dep_Names is new Containers.Indefinite_Ordered_Sets (String); package Dep_Names is new Containers.Indefinite_Ordered_Sets (String);
function Load_ALI (Filename : String) return ALI_Id; function Load_ALI (Filename : String) return ALI_Id;
-- Load an ALI file and returns its id -- Load an ALI file and return its id
-------------- --------------
-- Load_ALI -- -- Load_ALI --
...@@ -416,6 +417,7 @@ package body Prj.Util is ...@@ -416,6 +417,7 @@ package body Prj.Util is
Result : ALI_Id := No_ALI_Id; Result : ALI_Id := No_ALI_Id;
Text : Text_Buffer_Ptr; Text : Text_Buffer_Ptr;
Lib_File : File_Name_Type; Lib_File : File_Name_Type;
begin begin
if Directories.Exists (Filename) then if Directories.Exists (Filename) then
Name_Len := 0; Name_Len := 0;
...@@ -435,6 +437,8 @@ package body Prj.Util is ...@@ -435,6 +437,8 @@ package body Prj.Util is
return Result; return Result;
end Load_ALI; end Load_ALI;
-- Local declarations
Iter : Source_Iterator := For_Each_Source (Tree, Project); Iter : Source_Iterator := For_Each_Source (Tree, Project);
Sid : Source_Id; Sid : Source_Id;
ALI : ALI_Id; ALI : ALI_Id;
...@@ -444,8 +448,10 @@ package body Prj.Util is ...@@ -444,8 +448,10 @@ package body Prj.Util is
Body_Needed : Boolean; Body_Needed : Boolean;
Deps : Dep_Names.Set; Deps : Dep_Names.Set;
-- Start of processing for For_Interface_Sources
begin begin
-- First look at all the spec, check if the body is needed -- First look at each spec, check if the body is needed
loop loop
Sid := Element (Iter); Sid := Element (Iter);
...@@ -457,23 +463,23 @@ package body Prj.Util is ...@@ -457,23 +463,23 @@ package body Prj.Util is
if Sid.Kind = Spec if Sid.Kind = Spec
and then not Sid.Locally_Removed and then not Sid.Locally_Removed
and then (Project.Standalone_Library = No and then (Project.Standalone_Library = No
or else Sid.Declared_In_Interfaces) or else Sid.Declared_In_Interfaces)
then then
Action (Sid); Action (Sid);
-- Check ALI for dependencies on body and sep -- Check ALI for dependencies on body and sep
ALI := Load_ALI ALI :=
(Get_Name_String (Get_Object_Directory (Sid.Project, True)) Load_ALI
& Get_Name_String (Sid.Dep_Name)); (Get_Name_String (Get_Object_Directory (Sid.Project, True))
& Get_Name_String (Sid.Dep_Name));
if ALI /= No_ALI_Id then if ALI /= No_ALI_Id then
First_Unit := ALIs.Table (ALI).First_Unit; First_Unit := ALIs.Table (ALI).First_Unit;
Second_Unit := No_Unit_Id; Second_Unit := No_Unit_Id;
Body_Needed := True; Body_Needed := True;
-- If there is both a spec and a body, check if they are both -- If there is both a spec and a body, check if both needed
-- needed.
if Units.Table (First_Unit).Utype = Is_Body then if Units.Table (First_Unit).Utype = Is_Body then
Second_Unit := ALIs.Table (ALI).Last_Unit; Second_Unit := ALIs.Table (ALI).Last_Unit;
......
...@@ -236,13 +236,14 @@ package Prj.Util is ...@@ -236,13 +236,14 @@ package Prj.Util is
generic generic
with procedure Action (Source : Source_Id); with procedure Action (Source : Source_Id);
procedure For_Interface_Sources procedure For_Interface_Sources
(Tree : Project_Tree_Ref; Project : Project_Id); (Tree : Project_Tree_Ref;
-- Call Action for every sources that are needed to use Project. This Project : Project_Id);
-- is either the sources corresponding to the unit in the Interfaces -- Call Action for every sources that are needed to use Project. This is
-- attributes or all sources of the project. Note that only the body -- either the sources corresponding to the units in attribute Interfaces or
-- needed (because the unit if generic or contains some inline pragmas) -- all sources of the project. Note that only the bodies that are needed
-- are handled. This routine must be called only when the project as -- (because the unit is generic or contains some inline pragmas) are
-- sucessfully been built. -- handled. This routine must be called only when the project has been
-- built successfully.
private private
type Text_File_Data is record type Text_File_Data is record
......
...@@ -219,10 +219,14 @@ package body Sem_Cat is ...@@ -219,10 +219,14 @@ package body Sem_Cat is
then then
null; null;
-- Special case: Remote_Types can depend on Preelaborated per -- Special case: Remote_Types and Remote_Call_Interface declarations
-- Ada 2005 AI 0206. -- can depend on a preelaborated unit via a private with_clause, per
-- AI05-0206.
elsif Unit_Category = Remote_Types
elsif (Unit_Category = Remote_Types
or else Unit_Category = Remote_Call_Interface)
and then (Nkind (N) = N_With_Clause
and then Private_Present (N))
and then Is_Preelaborated (Depended_Entity) and then Is_Preelaborated (Depended_Entity)
then then
null; null;
...@@ -263,6 +267,17 @@ package body Sem_Cat is ...@@ -263,6 +267,17 @@ package body Sem_Cat is
then then
return; return;
-- Dependence of Remote_Types or Remote_Call_Interface declaration
-- on a preelaborated unit with a normal with_clause.
elsif (Unit_Category = Remote_Types
or else Unit_Category = Remote_Call_Interface)
and then Is_Preelaborated (Depended_Entity)
then
Error_Msg_NE
("<must use private with clause for preelaborated unit& ",
N, Depended_Entity);
-- Subunit case -- Subunit case
elsif Is_Subunit then elsif Is_Subunit then
......
...@@ -6423,11 +6423,8 @@ package body Sem_Ch13 is ...@@ -6423,11 +6423,8 @@ package body Sem_Ch13 is
-- If the end of declarations comes before any other freeze -- If the end of declarations comes before any other freeze
-- point, the Freeze_Expr is not analyzed: no check needed. -- point, the Freeze_Expr is not analyzed: no check needed.
if Analyzed (Freeze_Expr) if Analyzed (Freeze_Expr) and then not In_Instance then
and then not In_Instance
then
Check_Overloaded_Name; Check_Overloaded_Name;
else else
Err := False; Err := False;
end if; end if;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment