mirror of git://gcc.gnu.org/git/gcc.git
[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
This commit is contained in:
parent
c1a9b6df9c
commit
b7f7dab274
|
|
@ -1,3 +1,16 @@
|
||||||
|
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;
|
||||||
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
|
||||||
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
|
||||||
-- 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
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
-- 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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue