diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0c292b9e5d10..226f740b8999 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2010-10-04 Robert Dewar <dewar@adacore.com> + + * sem_res.adb, sinput-l.adb: Minor reformatting. + +2010-10-04 Hristian Kirtchev <kirtchev@adacore.com> + + * exp_ch5.adb (Expand_N_Assignment_Statement): Do not generate a tag + check when the target object is an interface since the expression of + the right hand side must only cover the interface. + 2010-10-04 Vincent Celier <celier@adacore.com> * frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 8760cb7aae25..6c7c8ce65fc2 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -1956,6 +1956,12 @@ package body Exp_Ch5 is if Is_Class_Wide_Type (Typ) and then Is_Tagged_Type (Typ) and then Is_Tagged_Type (Underlying_Type (Etype (Rhs))) + + -- Do not generate a tag check when the target object is + -- an interface since the expression of the right hand + -- side must only cover the interface. + + and then not Is_Interface (Typ) then Append_To (L, Make_Raise_Constraint_Error (Loc, diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index fa0b66be5b45..c019c3022505 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -8826,9 +8826,9 @@ package body Sem_Res is (Etype (Entity (Orig_N)) = Orig_T or else (Ekind (Entity (Orig_N)) = E_Loop_Parameter - and then Covers (Orig_T, Etype (Entity (Orig_N)))))) + and then Covers (Orig_T, Etype (Entity (Orig_N)))))) - -- If not an entity, then type of expression must match + -- If not an entity, then type of expression must match or else Etype (Orig_N) = Orig_T then diff --git a/gcc/ada/sinput-l.adb b/gcc/ada/sinput-l.adb index 8d952b2cd042..52f3a713bb15 100644 --- a/gcc/ada/sinput-l.adb +++ b/gcc/ada/sinput-l.adb @@ -556,13 +556,14 @@ package body Sinput.L is -- the source has been modified by the preprocessing. Only -- do that for the main unit (spec, body and subunits). - if Generate_Processed_File and then - Modified and then + if Generate_Processed_File + and then Modified + and then ((Compiler_State = Parsing - and then Parsing_Main_Extended_Source) - or else - (Compiler_State = Analyzing - and then Analysing_Subunit_Of_Main)) + and then Parsing_Main_Extended_Source) + or else + (Compiler_State = Analyzing + and then Analysing_Subunit_Of_Main)) then declare FD : File_Descriptor;