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;

Reply via email to