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