summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-26 15:15:14 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-26 15:15:14 +0000
commit6b8d43fc1820aef13c4a267f82a92e7e90380ec6 (patch)
tree46c60dccfdc124935bda6f8c97975730af00f90d
parenta5093862059fbc434fc70fa576e93c6adc0d116a (diff)
downloadppe42-gcc-6b8d43fc1820aef13c4a267f82a92e7e90380ec6.tar.gz
ppe42-gcc-6b8d43fc1820aef13c4a267f82a92e7e90380ec6.zip
2008-05-26 Gary Dismukes <dismukes@adacore.com>
* exp_ch3.adb (Build_Array_Init_Proc): Only set Init_Proc to a dummy init proc entity when there is actual default initialization associated with the component type, to avoid spurious errors on objects of scalar array types that are marked Is_Public when No_Default_Initialization applies. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@135938 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/exp_ch3.adb36
1 files changed, 23 insertions, 13 deletions
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index c1195518c97..8324763e92a 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -533,11 +533,12 @@ package body Exp_Ch3 is
---------------------------
procedure Build_Array_Init_Proc (A_Type : Entity_Id; Nod : Node_Id) is
- Loc : constant Source_Ptr := Sloc (Nod);
- Comp_Type : constant Entity_Id := Component_Type (A_Type);
- Index_List : List_Id;
- Proc_Id : Entity_Id;
- Body_Stmts : List_Id;
+ Loc : constant Source_Ptr := Sloc (Nod);
+ Comp_Type : constant Entity_Id := Component_Type (A_Type);
+ Index_List : List_Id;
+ Proc_Id : Entity_Id;
+ Body_Stmts : List_Id;
+ Has_Default_Init : Boolean;
function Init_Component return List_Id;
-- Create one statement to initialize one array component, designated
@@ -671,14 +672,16 @@ package body Exp_Ch3 is
-- the issue arises) in a special manner anyway which does not need an
-- init_proc.
- if Has_Non_Null_Base_Init_Proc (Comp_Type)
- or else Needs_Simple_Initialization (Comp_Type)
- or else Has_Task (Comp_Type)
+ Has_Default_Init := Has_Non_Null_Base_Init_Proc (Comp_Type)
+ or else Needs_Simple_Initialization (Comp_Type)
+ or else Has_Task (Comp_Type);
+
+ if Has_Default_Init
or else (not Restriction_Active (No_Initialize_Scalars)
- and then Is_Public (A_Type)
- and then Root_Type (A_Type) /= Standard_String
- and then Root_Type (A_Type) /= Standard_Wide_String
- and then Root_Type (A_Type) /= Standard_Wide_Wide_String)
+ and then Is_Public (A_Type)
+ and then Root_Type (A_Type) /= Standard_String
+ and then Root_Type (A_Type) /= Standard_Wide_String
+ and then Root_Type (A_Type) /= Standard_Wide_Wide_String)
then
Proc_Id :=
Make_Defining_Identifier (Loc,
@@ -688,9 +691,16 @@ package body Exp_Ch3 is
-- want to build an init_proc, but we need to mark that an init_proc
-- would be needed if this restriction was not active (so that we can
-- detect attempts to call it), so set a dummy init_proc in place.
+ -- This is only done though when actual default initialization is
+ -- needed, so we exclude the setting in the Is_Public case, such
+ -- as for arrays of scalars, since otherwise such objects would be
+ -- wrongly flagged as violating the restriction.
if Restriction_Active (No_Default_Initialization) then
- Set_Init_Proc (A_Type, Proc_Id);
+ if Has_Default_Init then
+ Set_Init_Proc (A_Type, Proc_Id);
+ end if;
+
return;
end if;
OpenPOWER on IntegriCloud