[multiple changes]

2009-10-28  Robert Dewar  <dewar@adacore.com>

	* sem_type.adb: Minor reformatting

2009-10-28  Arnaud Charlet  <charlet@adacore.com>

	* exp_ch9.adb (Build_Task_Proc_Specification): Generate a different
	suffix for task type bodies.

2009-10-28  Ed Schonberg  <schonberg@adacore.com>

	* exp_aggr.adb (Convert_Aggr_In_Allocator): Do not look for a
	finalization list if the designated type requires no control actions,
	to prevent a useless semantic dependence on ada.tags.

From-SVN: r153705
This commit is contained in:
Arnaud Charlet 2009-10-29 15:42:50 +01:00
parent 90e7755315
commit eb44440252
4 changed files with 62 additions and 15 deletions

View File

@ -1,3 +1,18 @@
2009-10-28 Robert Dewar <dewar@adacore.com>
* sem_type.adb: Minor reformatting
2009-10-28 Arnaud Charlet <charlet@adacore.com>
* exp_ch9.adb (Build_Task_Proc_Specification): Generate a different
suffix for task type bodies.
2009-10-28 Ed Schonberg <schonberg@adacore.com>
* exp_aggr.adb (Convert_Aggr_In_Allocator): Do not look for a
finalization list if the designated type requires no control actions,
to prevent a useless semantic dependence on ada.tags.
2009-10-28 Bob Duff <duff@adacore.com>
* s-fileio.adb: Give more information in exception messages.

View File

@ -3298,8 +3298,14 @@ package body Exp_Aggr is
N_Discriminant_Specification
then
Flist := Empty;
else
elsif Needs_Finalization (Typ) then
Flist := Find_Final_List (Access_Type);
-- Otherwise there are no controlled actions to be performed.
else
Flist := Empty;
end if;
if Is_Array_Type (Typ) then

View File

@ -3983,9 +3983,18 @@ package body Exp_Ch9 is
Spec_Id : Entity_Id;
begin
Spec_Id :=
Make_Defining_Identifier (Loc,
Chars => New_External_Name (Chars (T), 'B'));
if Comes_From_Source (T) then
-- This is an explicit task type
Spec_Id :=
Make_Defining_Identifier (Loc,
Chars => New_External_Name (Chars (T), "TB"));
else
-- This is an anonymous task type
Spec_Id :=
Make_Defining_Identifier (Loc,
Chars => New_External_Name (Chars (T), 'B'));
end if;
Set_Is_Internal (Spec_Id);
-- Associate the procedure with the task, if this is the declaration

View File

@ -732,7 +732,7 @@ package body Sem_Type is
begin
-- If either operand missing, then this is an error, but ignore it (and
-- pretend we have a cover) if errors already detected, since this may
-- simply mean we have malformed trees.
-- simply mean we have malformed trees or a semantic error upstream.
if No (T1) or else No (T2) then
if Total_Errors_Detected /= 0 then
@ -803,7 +803,8 @@ package body Sem_Type is
then
return True;
-- The context may be class wide
-- The context may be class wide, and a class-wide type is
-- compatible with any member of the class.
elsif Is_Class_Wide_Type (T1)
and then Is_Ancestor (Root_Type (T1), T2)
@ -816,8 +817,8 @@ package body Sem_Type is
then
return True;
-- Ada 2005 (AI-345): A class-wide abstract interface type T1 covers a
-- task_type or protected_type implementing T1
-- Ada 2005 (AI-345): A class-wide abstract interface type covers a
-- task_type or protected_type that implements the interface.
elsif Ada_Version >= Ada_05
and then Is_Class_Wide_Type (T1)
@ -884,7 +885,10 @@ package body Sem_Type is
then
return True;
-- Some contexts require a class of types rather than a specific type
-- Some contexts require a class of types rather than a specific type.
-- For example, conditions require any boolean type, fixed point
-- attributes require some real type, etc. The built-in types Any_XXX
-- represent these classes.
elsif (T1 = Any_Integer and then Is_Integer_Type (T2))
or else (T1 = Any_Boolean and then Is_Boolean_Type (T2))
@ -963,6 +967,8 @@ package body Sem_Type is
then
return Covers (Corresponding_Remote_Type (T1), T2);
-- and conversely.
elsif Is_Record_Type (T2)
and then (Is_Remote_Call_Interface (T2)
or else Is_Remote_Types (T2))
@ -970,6 +976,10 @@ package body Sem_Type is
then
return Covers (Corresponding_Remote_Type (T2), T1);
-- Synchronized types are represented at run time by their corresponding
-- record type. During expansion one is replaced with the other, but
-- they are compatible views of the same type.
elsif Is_Record_Type (T1)
and then Is_Concurrent_Type (T2)
and then Present (Corresponding_Record_Type (T2))
@ -982,9 +992,14 @@ package body Sem_Type is
then
return Covers (Corresponding_Record_Type (T1), T2);
-- During analysis, an attribute reference 'Access has a special type
-- kind: Access_Attribute_Type, to be replaced eventually with the type
-- imposed by context.
elsif Ekind (T2) = E_Access_Attribute_Type
and then (Ekind (BT1) = E_General_Access_Type
or else Ekind (BT1) = E_Access_Type)
or else
Ekind (BT1) = E_Access_Type)
and then Covers (Designated_Type (T1), Designated_Type (T2))
then
-- If the target type is a RACW type while the source is an access
@ -996,6 +1011,8 @@ package body Sem_Type is
return True;
-- Ditto for allocators, which eventually resolve to the context type
elsif Ekind (T2) = E_Allocator_Type
and then Is_Access_Type (T1)
then
@ -1020,7 +1037,7 @@ package body Sem_Type is
-- A packed array type covers its corresponding non-packed type. This is
-- not legitimate Ada, but allows the omission of a number of otherwise
-- useless unchecked conversions, and since this can only arise in
-- (known correct) expanded code, no harm is done
-- (known correct) expanded code, no harm is done.
elsif Is_Array_Type (T2)
and then Is_Packed (T2)
@ -1077,7 +1094,7 @@ package body Sem_Type is
return True;
-- Ada 2005 (AI-50217): Additional branches to make the shadow entity
-- compatible with its real entity.
-- obtained through a limited_with compatible with its real entity.
elsif From_With_Type (T1) then
@ -1099,7 +1116,7 @@ package body Sem_Type is
-- If units in the context have Limited_With clauses on each other,
-- either type might have a limited view. Checks performed elsewhere
-- verify that the context type is the non-limited view.
-- verify that the context type is the nonlimited view.
if Is_Incomplete_Type (T2) then
return Covers (T1, Get_Full_View (Non_Limited_View (T2)));
@ -1123,7 +1140,7 @@ package body Sem_Type is
-- Ada 2005 (AI-423): Coverage of formal anonymous access types
-- and actual anonymous access types in the context of generic
-- instantiation. We have the following situation:
-- instantiations. We have the following situation:
-- generic
-- type Formal is private;
@ -1145,7 +1162,7 @@ package body Sem_Type is
then
return True;
-- Otherwise it doesn't cover!
-- Otherwise, types are not compatible!
else
return False;