2014-07-29 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 Jul 2014 13:11:55 +0000 (13:11 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 Jul 2014 13:11:55 +0000 (13:11 +0000)
* freeze.adb (Freeze_Entity, Concurrent_Type case): Add a guard
to make sure that the Etype of a component of the corresponding
record type is present before trying to freeze it.
* sem_ch5.adb: Minor reformatting.

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

gcc/ada/ChangeLog
gcc/ada/freeze.adb
gcc/ada/sem_ch5.adb

index 2ccfdf4..917f4be 100644 (file)
@@ -1,5 +1,12 @@
 2014-07-29  Robert Dewar  <dewar@adacore.com>
 
+       * freeze.adb (Freeze_Entity, Concurrent_Type case): Add a guard
+       to make sure that the Etype of a component of the corresponding
+       record type is present before trying to freeze it.
+       * sem_ch5.adb: Minor reformatting.
+
+2014-07-29  Robert Dewar  <dewar@adacore.com>
+
        * exp_attr.adb, types.ads, types.h, exp_ch11.adb, a-except.adb,
        a-except-2005.adb: Add new reason code PE_Stream_Operation_Not_Allowed,
        and then use it when a stream operation is used from a library generic
index ddd162f..9aee0a1 100644 (file)
@@ -4710,13 +4710,19 @@ package body Freeze is
                   Freeze_And_Append (Comp, N, Result);
 
                elsif (Ekind (Comp)) /= E_Function then
-                  if Is_Itype (Etype (Comp))
-                    and then Underlying_Type (Scope (Etype (Comp))) = E
-                  then
-                     Undelay_Type (Etype (Comp));
-                  end if;
 
-                  Freeze_And_Append (Etype (Comp), N, Result);
+                  --  The guard on the presence of the Etype seems to be needed
+                  --  for some CodePeer (-gnatcC) cases, but not clear why???
+
+                  if Present (Etype (Comp)) then
+                     if Is_Itype (Etype (Comp))
+                       and then Underlying_Type (Scope (Etype (Comp))) = E
+                     then
+                        Undelay_Type (Etype (Comp));
+                     end if;
+
+                     Freeze_And_Append (Etype (Comp), N, Result);
+                  end if;
                end if;
 
                Next_Entity (Comp);
index 3ac6e6b..c52f242 100644 (file)
@@ -3184,6 +3184,7 @@ package body Sem_Ch5 is
 
                   --  We skip this step if we are not in code generation mode
                   --  or CodePeer mode.
+
                   --  This is the one case where we remove dead code in the
                   --  semantics as opposed to the expander, and we do not want
                   --  to remove code if we are not in code generation mode,