Commit a8a89b74 by Javier Miranda Committed by Arnaud Charlet

sem_ch3.adb (Build_Derived_Record_Type): Initialize Parent_Base to the full view…

sem_ch3.adb (Build_Derived_Record_Type): Initialize Parent_Base to the full view of the parent type when...

2014-05-21  Javier Miranda  <miranda@adacore.com>

	* sem_ch3.adb (Build_Derived_Record_Type): Initialize Parent_Base
	to the full view of the parent type when processing a derived type
	which is the full view of a private type not defined in a generic
	unit which is derived from a private type with discriminants
	whose full view is a non-tagged record type.

From-SVN: r210699
parent 95bc61b2
2014-05-21 Javier Miranda <miranda@adacore.com> 2014-05-21 Javier Miranda <miranda@adacore.com>
* sem_ch3.adb (Build_Derived_Record_Type): Initialize Parent_Base
to the full view of the parent type when processing a derived type
which is the full view of a private type not defined in a generic
unit which is derived from a private type with discriminants
whose full view is a non-tagged record type.
2014-05-21 Javier Miranda <miranda@adacore.com>
* exp_ch4.adb (Expand_Allocator_Expression.Apply_Accessibility_Check): * exp_ch4.adb (Expand_Allocator_Expression.Apply_Accessibility_Check):
Complete previous patch. Complete previous patch.
......
...@@ -7453,6 +7453,20 @@ package body Sem_Ch3 is ...@@ -7453,6 +7453,20 @@ package body Sem_Ch3 is
and then Has_Discriminants (Parent_Type) and then Has_Discriminants (Parent_Type)
then then
Parent_Base := Base_Type (Full_View (Parent_Type)); Parent_Base := Base_Type (Full_View (Parent_Type));
-- Handle a derived type which is the full view of a private type not
-- defined in a generic unit which is derived from a private type with
-- discriminants whose full view is a non-tagged record type.
elsif not Inside_A_Generic
and then Ekind (Parent_Type) = E_Private_Type
and then Has_Discriminants (Parent_Type)
and then Present (Full_View (Parent_Type))
and then Is_Record_Type (Full_View (Parent_Type))
and then not Is_Tagged_Type (Full_View (Parent_Type))
and then Has_Private_Declaration (Derived_Type)
then
Parent_Base := Base_Type (Full_View (Parent_Type));
else else
Parent_Base := Base_Type (Parent_Type); Parent_Base := Base_Type (Parent_Type);
end if; end if;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment