[Bug fortran/71066] [7/8/9 Regression] ICE in set_loop_bounds, at fortran/trans-array.c:4680
tkoenig at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Feb 10 10:02:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71066
--- Comment #12 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
(In reply to Thomas Koenig from comment #11)
> Slightly different variant of z3.f90, with a different ICE:
>
> program p
> real :: a(2,2)[*]
> data a /1.0, 2.0, 3.0, 4.0/
> end
>
> Interner Compiler-Fehler: Speicherzugriffsfehler
> 0xe24dff crash_signal
> ../../trunk/gcc/toplev.c:326
> 0x986688 gfc_get_nodesc_array_type(tree_node*, gfc_array_spec*, gfc_packed,
> bool)
> ../../trunk/gcc/fortran/trans-types.c:1617
> 0x90822b gfc_build_constant_array_constructor(gfc_expr*, tree_node*)
> ../../trunk/gcc/fortran/trans-array.c:2267
> 0x945fd4 gfc_trans_array_constructor_copy
> ../../trunk/gcc/fortran/trans-expr.c:9913
> 0x945fd4 gfc_trans_assignment(gfc_expr*, gfc_expr*, bool, bool, bool, bool)
> ../../trunk/gcc/fortran/trans-expr.c:10891
This particular case can be fixes (well, sort of) with
Index: trans-decl.c
===================================================================
--- trans-decl.c (Revision 268432)
+++ trans-decl.c (Arbeitskopie)
@@ -5399,6 +5399,12 @@
/* Handle "static" initializer. */
if (sym->value)
{
+ /* An EXPR_ARRAY with a rank > 1 here has to come from a DATA
+ statement. Set its rank here as not to confuse the following
+ steps. See PR 71066. */
+ if (sym->value->expr_type == EXPR_ARRAY)
+ sym->value->rank = 1;
+
sym->attr.pointer = 1;
tmp = gfc_trans_assignment (gfc_lval_expr_from_sym (sym), sym->value,
true, false);
but z3.f90 still ICEs.
More information about the Gcc-bugs
mailing list