https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93835
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Priority|P3 |P4 Status|UNCONFIRMED |NEW Last reconfirmed| |2020-02-19 CC| |kargl at gcc dot gnu.org Target Milestone|--- |10.0 Ever confirmed|0 |1 --- Comment #2 from kargl at gcc dot gnu.org --- Patch is against svn r280157. Someone needs to convert the example code into a testcase. Some whitespace clean is mixed in as a bonus. Index: gcc/fortran/simplify.c =================================================================== --- gcc/fortran/simplify.c (revision 280157) +++ gcc/fortran/simplify.c (working copy) @@ -5497,7 +5497,7 @@ simplify_findloc_nodim (gfc_expr *result, gfc_expr *va bool continue_loop; bool ma; - for (i = 0; i<array->rank; i++) + for (i = 0; i < array->rank; i++) res[i] = -1; /* Shortcut for constant .FALSE. MASK. */ @@ -5506,14 +5506,19 @@ simplify_findloc_nodim (gfc_expr *result, gfc_expr *va && !mask->value.logical) goto finish; - for (i = 0; i < array->rank; i++) + if (array->shape) { - count[i] = 0; - sstride[i] = (i == 0) ? 1 : sstride[i-1] * mpz_get_si (array->shape[i-1]); - extent[i] = mpz_get_si (array->shape[i]); - if (extent[i] <= 0) - goto finish; + for (i = 0; i < array->rank; i++) + { + count[i] = 0; + sstride[i] = (i == 0) ? 1 : sstride[i-1] * mpz_get_si (array->shape[i-1]); + extent[i] = mpz_get_si (array->shape[i]); + if (extent[i] <= 0) + goto finish; + } } + else + goto finish; continue_loop = true; array_ctor = gfc_constructor_first (array->value.constructor); @@ -5540,7 +5545,7 @@ simplify_findloc_nodim (gfc_expr *result, gfc_expr *va if (ma && gfc_compare_expr (a, value, INTRINSIC_EQ) == 0) { - for (i = 0; i<array->rank; i++) + for (i = 0; i < array->rank; i++) res[i] = count[i]; if (!back_val) goto finish; @@ -5565,9 +5570,9 @@ simplify_findloc_nodim (gfc_expr *result, gfc_expr *va } while (count[n] == extent[n]); } - finish: +finish: result_ctor = gfc_constructor_first (result->value.constructor); - for (i = 0; i<array->rank; i++) + for (i = 0; i < array->rank; i++) { gfc_expr *r_expr; r_expr = result_ctor->expr;