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? Thanks, Richard. 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