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;