[Bug fortran/77679] [6/7 Regression] ICE in fold_array_ctor_reference, at gimple-fold.c:5586
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Sep 22 08:25:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77679
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |accepts-invalid
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
5646 /* Static constructors for variably sized objects makes no sense. */
5647 gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor))))
5648 == INTEGER_CST);
aha...
(gdb) p debug_generic_expr (ctor->typed.type)
character(kind=1)[2][1:n (&C.3418)]
It's easy to make the folding routines not ICE by replacing the assert with
giving up. Will do that but leave the bug open as accepts-invalid (the
diagnosis
is from the time we try to output the variable).
Testing
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
More information about the Gcc-bugs
mailing list