2010-10-04 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Oct 2010 13:38:32 +0000 (13:38 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Oct 2010 13:38:32 +0000 (13:38 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164935 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/exp_ch5.adb
gcc/ada/sem_res.adb
gcc/ada/sinput-l.adb

index 0c292b9..226f740 100644 (file)
@@ -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
index 8760cb7..6c7c8ce 100644 (file)
@@ -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,
index fa0b66b..c019c30 100644 (file)
@@ -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
index 8d952b2..52f3a71 100644 (file)
@@ -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;