We now generate elaboration code to initialize an aggregate that contains a 
null access-to-unconstrained-array value.

Fixed thusly, tested on i586-suse-linux, applied on the mainline.


2011-12-11  Eric Botcazou  <ebotca...@adacore.com>

        * gcc-interface/utils2.c (gnat_build_constructor): Test the TREE_STATIC
        flag of elements to compute that of the constructor.


2011-12-11  Eric Botcazou  <ebotca...@adacore.com>

        * gnat.dg/specs/elab3.ads: New test.


-- 
Eric Botcazou
Index: gcc-interface/utils2.c
===================================================================
--- gcc-interface/utils2.c	(revision 182102)
+++ gcc-interface/utils2.c	(working copy)
@@ -1817,7 +1817,7 @@ gnat_build_constructor (tree type, VEC(c
   FOR_EACH_CONSTRUCTOR_ELT (v, n_elmts, obj, val)
     {
       /* The predicate must be in keeping with output_constructor.  */
-      if (!TREE_CONSTANT (val)
+      if ((!TREE_CONSTANT (val) && !TREE_STATIC (val))
 	  || (TREE_CODE (type) == RECORD_TYPE
 	      && CONSTRUCTOR_BITFIELD_P (obj)
 	      && !initializer_constant_valid_for_bitfield_p (val))
-- { dg-do compile }

pragma Restrictions(No_Elaboration_Code);

package Elab3 is

   type T_List is array (Positive range <>) of Integer;
   type T_List_Access is access constant T_List;

   type R is record
     A : T_List_Access;
   end record;

   C : constant R := (A => null);

end Elab3;

Reply via email to