exp_aggr.adb (Build_Record_Aggr_Code): Default-initialialized records with IP subprogram were only supported if...

2005-12-05  Javier Miranda  <miranda@adacore.com>

	* exp_aggr.adb (Build_Record_Aggr_Code): Default-initialialized records
	with IP subprogram were only supported if there were limited types.

	* sem_aggr.adb (Resolve_Record_Aggregate): Default-initialialized
	records with IP subprogram were only supported if there were limited
	types.

From-SVN: r108289
This commit is contained in:
Javier Miranda 2005-12-09 18:16:47 +01:00 committed by Arnaud Charlet
parent 23d0d17f0d
commit 52739835a1
2 changed files with 12 additions and 6 deletions

View File

@ -2358,10 +2358,11 @@ package body Exp_Aggr is
while Present (Comp) loop
Selector := Entity (First (Choices (Comp)));
-- Ada 2005 (AI-287): Default initialization of a limited component
-- Ada 2005 (AI-287): For each default-initialized component genarate
-- a call to the corresponding IP subprogram if available.
if Box_Present (Comp)
and then Is_Limited_Type (Etype (Selector))
and then Has_Non_Null_Base_Init_Proc (Etype (Selector))
then
-- Ada 2005 (AI-287): If the component type has tasks then
-- generate the activation chain and master entities (except

View File

@ -29,6 +29,7 @@ with Checks; use Checks;
with Einfo; use Einfo;
with Elists; use Elists;
with Errout; use Errout;
with Exp_Tss; use Exp_Tss;
with Exp_Util; use Exp_Util;
with Freeze; use Freeze;
with Itypes; use Itypes;
@ -2984,11 +2985,15 @@ package body Sem_Aggr is
Component := Node (Component_Elmt);
Expr := Get_Value (Component, Component_Associations (N), True);
-- Ada 2005 (AI-287): Default initialized limited component are
-- passed to the expander, that will generate calls to the
-- corresponding IP.
-- Ada 2005 (AI-287): Although the default initialization by means
-- of the mbox was initially added to Ada 2005 for limited types, it
-- is not constrained to limited types. Therefore if the component
-- has some initialization procedure (IP) we pass the component to
-- the expander, which will generate the call to such IP.
if Mbox_Present and then Is_Limited_Type (Etype (Component)) then
if Mbox_Present
and then Has_Non_Null_Base_Init_Proc (Etype (Component))
then
Add_Association
(Component => Component,
Expr => Empty,