[Bug fortran/96624] A segment fault occurred when using the reshape function result to assign a variable

kargl at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Aug 15 16:11:10 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96624

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2020-08-15
             Status|UNCONFIRMED                 |NEW
           Priority|P3                          |P4

--- Comment #1 from kargl at gcc dot gnu.org ---
Why?

Index: gcc/fortran/simplify.c
===================================================================
--- gcc/fortran/simplify.c      (revision 280157)
+++ gcc/fortran/simplify.c      (working copy)
@@ -6650,6 +6650,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shap
   unsigned long j;
   size_t nsource;
   gfc_expr *e, *result;
+  bool zerosize = false;

   /* Check that argument expression types are OK.  */
   if (!is_constant_array_expr (source)
@@ -6772,8 +6773,15 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shap
   result->rank = rank;
   result->shape = gfc_get_shape (rank);
   for (i = 0; i < rank; i++)
-    mpz_init_set_ui (result->shape[i], shape[i]);
+    {
+      mpz_init_set_ui (result->shape[i], shape[i]);
+      if (shape[i] == 0)
+        zerosize = true;
+    }

+  if (zerosize)
+    goto sizezero;
+
   while (nsource > 0 || npad > 0)
     {
       /* Figure out which element to extract.  */
@@ -6821,6 +6829,8 @@ inc:

       break;
     }
+
+sizezero:

   mpz_clear (index);


More information about the Gcc-bugs mailing list