freeze.adb (Freeze_Entity, [...]): Add a guard to make sure that the Etype of a component of the corresponding...

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.

From-SVN: r213165
This commit is contained in:
Robert Dewar 2014-07-29 13:11:55 +00:00 committed by Arnaud Charlet
parent b8b2d9829a
commit a08bf2de29
3 changed files with 20 additions and 6 deletions

View File

@ -1,3 +1,10 @@
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,

View 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);

View 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,