On Thu, 31 Jul 2014, Richard Biener wrote:

> 
> The following fixes PR61950 by properly initializing the _size field
> of the static constructor for the vtable init member.  Previously
> gfortran would use a 64bit integer to initialize the 32bit size field
> (not sure why larger aggregates are not considered).
> 
> This breaks more sophisticated constant-folding and previously
> inhibited constant folding (which would have worked in this case
> been there no mismatch between initializer and field).
> 
> Bootstrap and regtest ongoing on powerpc64-linux-gnu, ok?  I'm not
> considering a backport as it is only a missed optimization there.

Ping?

Thanks,
Richard.

> Thanks,
> Richard.
> 
> 2014-07-31  Richard Biener  <rguent...@suse.de>
> 
>       * trans-expr.c (gfc_conv_structure): Initialize _size with
>       a value of proper type.
> 
> Index: gcc/fortran/trans-expr.c
> ===================================================================
> --- gcc/fortran/trans-expr.c  (revision 213342)
> +++ gcc/fortran/trans-expr.c  (working copy)
> @@ -6260,7 +6260,9 @@ gfc_conv_structure (gfc_se * se, gfc_exp
>        else if (cm->ts.u.derived && strcmp (cm->name, "_size") == 0)
>       {
>         val = TYPE_SIZE_UNIT (gfc_get_derived_type (cm->ts.u.derived));
> -       CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl, val);
> +       CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl,
> +                               fold_convert (TREE_TYPE (cm->backend_decl),
> +                                             val));
>       }
>        else
>       {
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer

Reply via email to