[multiple changes]

2014-10-17  Ed Schonberg  <schonberg@adacore.com>

	* exp_ch3.adb (Build_Component_Invariant_Call): Retrieve Invariant
	subprogram from base type.
	* sem_ch7.adb (Analyze_Package_Specification): Build invariant
	subprogram for private type, not any of its subtypes.
	* sem_ch13.adb (Build_Invariant_Procedure_Declaration): Set type
	of procedure entity, because a call to it may be generated in
	a client unit before the corresponding subprogram declaration
	is analyzed.

2014-10-17  Vincent Celier  <celier@adacore.com>

	* prj-nmsc.adb (Get_Directories): Do not create directories
	when a project is abstract.

2014-10-17  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch5.adb (Analyze_Iterator_Specification): If the domain
	of iteration is given by an expression that is not an array type,
	verify that its type implements an iterator iterface.

From-SVN: r216380
This commit is contained in:
Arnaud Charlet 2014-10-17 11:11:14 +02:00
parent 99425ec329
commit ac2ea5c513
6 changed files with 47 additions and 4 deletions

View File

@ -1,3 +1,25 @@
2014-10-17 Ed Schonberg <schonberg@adacore.com>
* exp_ch3.adb (Build_Component_Invariant_Call): Retrieve Invariant
subprogram from base type.
* sem_ch7.adb (Analyze_Package_Specification): Build invariant
subprogram for private type, not any of its subtypes.
* sem_ch13.adb (Build_Invariant_Procedure_Declaration): Set type
of procedure entity, because a call to it may be generated in
a client unit before the corresponding subprogram declaration
is analyzed.
2014-10-17 Vincent Celier <celier@adacore.com>
* prj-nmsc.adb (Get_Directories): Do not create directories
when a project is abstract.
2014-10-17 Ed Schonberg <schonberg@adacore.com>
* sem_ch5.adb (Analyze_Iterator_Specification): If the domain
of iteration is given by an expression that is not an array type,
verify that its type implements an iterator iterface.
2014-10-17 Robert Dewar <dewar@adacore.com>
* sem_attr.adb (Eval_Attribute): Ensure that attribute

View File

@ -3720,10 +3720,12 @@ package body Exp_Ch3 is
end if;
end if;
-- The aspect is type-specific, so retrieve it from the base type.
Call :=
Make_Procedure_Call_Statement (Loc,
Name =>
New_Occurrence_Of (Invariant_Procedure (Typ), Loc),
New_Occurrence_Of (Invariant_Procedure (Base_Type (Typ)), Loc),
Parameter_Associations => New_List (Sel_Comp));
if Is_Access_Type (Etype (Comp)) then

View File

@ -5498,13 +5498,15 @@ package body Prj.Nmsc is
Dir_Exists : Boolean;
No_Sources : constant Boolean :=
((not Source_Files.Default
Project.Qualifier = Abstract_Project
or else
(((not Source_Files.Default
and then Source_Files.Values = Nil_String)
or else (not Source_Dirs.Default
and then Source_Dirs.Values = Nil_String)
or else (not Languages.Default
and then Languages.Values = Nil_String))
and then Project.Extends = No_Project;
and then Project.Extends = No_Project);
-- Start of processing for Get_Directories

View File

@ -3903,6 +3903,7 @@ package body Sem_Ch13 is
if Ctrl = Ent
or else Ctrl = Class_Wide_Type (Ent)
or else
(Ekind (Ctrl) = E_Anonymous_Access_Type
and then
@ -7393,6 +7394,7 @@ package body Sem_Ch13 is
Chars => New_External_Name (Chars (Typ), "Invariant"));
Set_Has_Invariants (Typ);
Set_Ekind (SId, E_Procedure);
Set_Etype (SId, Standard_Void_Type);
Set_Is_Invariant_Procedure (SId);
Set_Invariant_Procedure (Typ, SId);

View File

@ -1838,6 +1838,17 @@ package body Sem_Ch5 is
else
Typ := Etype (Iter_Name);
-- Verify that the expression produces an iterator.
if not Of_Present (N) and then not Is_Iterator (Typ)
and then not Is_Array_Type (Typ)
and then No (Find_Aspect (Typ, Aspect_Iterable))
then
Error_Msg_N
("expect object that implements iterator interface",
Iter_Name);
end if;
end if;
-- Protect against malformed iterator

View File

@ -1384,7 +1384,11 @@ package body Sem_Ch7 is
end if;
if Has_Invariants (E) then
Build_Invariant_Procedure (E, N);
if Ekind (E) = E_Private_Subtype then
null;
else
Build_Invariant_Procedure (E, N);
end if;
end if;
end if;