This fixes PR77697, an ice-on-invalid for Fortran (varasm later errors). Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard. 2016-09-22 Richard Biener <rguent...@suse.de> PR middle-end/77697 * gimple-fold.c (fold_array_ctor_reference): Turn asserts into fold fails. Index: gcc/gimple-fold.c =================================================================== --- gcc/gimple-fold.c (revision 240342) +++ gcc/gimple-fold.c (working copy) @@ -5647,14 +5638,15 @@ fold_array_ctor_reference (tree type, tr if (domain_type && TYPE_MIN_VALUE (domain_type)) { /* Static constructors for variably sized objects makes no sense. */ - gcc_assert (TREE_CODE (TYPE_MIN_VALUE (domain_type)) == INTEGER_CST); + if (TREE_CODE (TYPE_MIN_VALUE (domain_type)) != INTEGER_CST) + return NULL_TREE; low_bound = wi::to_offset (TYPE_MIN_VALUE (domain_type)); } else low_bound = 0; /* Static constructors for variably sized objects makes no sense. */ - gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor)))) - == INTEGER_CST); + if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor)))) != INTEGER_CST) + return NULL_TREE; elt_size = wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor)))); /* We can handle only constantly sized accesses that are known to not