OSDN Git Service

2005-12-05 Javier Miranda <miranda@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Dec 2005 17:16:47 +0000 (17:16 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Dec 2005 17:16:47 +0000 (17:16 +0000)
* 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.

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

gcc/ada/exp_aggr.adb
gcc/ada/sem_aggr.adb

index 6699b42..9c9508f 100644 (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
index b67a6a8..8890ffc 100644 (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,