On Fri, May 06, 2016 at 09:35:18AM +0200, Richard Biener wrote:
> 
> The following makes us skip zero-sized fields when encoding
> aggregate constructors to avoid ICEing when recursing with size == 0.
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu, ok?

Ok (looks safe even for the branch).

> 2016-05-06  Richard Biener  <rguent...@suse.de>
> 
>       PR middle-end/70931
>       * dwarf2out.c (native_encode_initializer): Skip zero-sized fields.
> 
>       * gfortran.dg/pr70931.f90: New testcase.
> 
> Index: gcc/dwarf2out.c
> ===================================================================
> *** gcc/dwarf2out.c   (revision 235859)
> --- gcc/dwarf2out.c   (working copy)
> *************** native_encode_initializer (tree init, un
> *** 17806,17812 ****
>             fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
>             pos = int_byte_position (field);
>             gcc_assert (pos + fieldsize <= size);
> !           if (val
>                 && !native_encode_initializer (val, array + pos, fieldsize))
>               return false;
>           }
> --- 17806,17812 ----
>             fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
>             pos = int_byte_position (field);
>             gcc_assert (pos + fieldsize <= size);
> !           if (val && fieldsize != 0
>                 && !native_encode_initializer (val, array + pos, fieldsize))
>               return false;
>           }
> Index: gcc/testsuite/gfortran.dg/pr70931.f90
> ===================================================================
> *** gcc/testsuite/gfortran.dg/pr70931.f90     (revision 0)
> --- gcc/testsuite/gfortran.dg/pr70931.f90     (working copy)
> ***************
> *** 0 ****
> --- 1,10 ----
> + ! { dg-do compile }
> + ! { dg-options "-g" }
> + program p
> +    type t
> +       integer :: a
> +       integer :: b(0)
> +    end type
> +    type(t), parameter :: z = t(1, [2])
> +    print *, z
> + end

        Jakub

Reply via email to