re PR fortran/84640 (gcc/fortran/simplify.c:2587:9: runtime error: pointer index...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 6 Oct 2018 11:45:05 +0000 (11:45 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 6 Oct 2018 11:45:05 +0000 (11:45 +0000)
 2018-10-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/84640
* simplify.c (gfc_simplify_cshift): Extend size of hs_ex and ss_ex
by one. Set extents one past the array boundaries to zero to avoid
warning with instrumented compiler.
(gfc_simplify_eoshift): Likewise, only for ss_ex.

From-SVN: r264898

gcc/fortran/ChangeLog
gcc/fortran/simplify.c

index 7eece23364044a3ac5e7351168f3030887f0e564..309a714aeaf7307f14db6866171b269ad8153539 100644 (file)
@@ -1,3 +1,11 @@
+ 2018-10-06  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/84640
+       * simplify.c (gfc_simplify_cshift): Extend size of hs_ex and ss_ex
+       by one. Set extents one past the array boundaries to zero to avoid
+       warning with instrumented compiler.
+       (gfc_simplify_eoshift): Likewise, only for ss_ex.
+
 2018-10-05  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/87487
index d35bbbaaa1b3d35bd38822c985fa455f25d08669..7bdd23d4e72c301618e0133bc5d1c71b6a9a0df6 100644 (file)
@@ -2011,11 +2011,11 @@ gfc_simplify_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
   ssize_t *shiftvec, *hptr;
   ssize_t shift_val, len;
   ssize_t count[GFC_MAX_DIMENSIONS], extent[GFC_MAX_DIMENSIONS],
-    hs_ex[GFC_MAX_DIMENSIONS],
+    hs_ex[GFC_MAX_DIMENSIONS + 1],
     hstride[GFC_MAX_DIMENSIONS], sstride[GFC_MAX_DIMENSIONS],
     a_extent[GFC_MAX_DIMENSIONS], a_stride[GFC_MAX_DIMENSIONS],
     h_extent[GFC_MAX_DIMENSIONS],
-    ss_ex[GFC_MAX_DIMENSIONS];
+    ss_ex[GFC_MAX_DIMENSIONS + 1];
   ssize_t rsoffset;
   int d, n;
   bool continue_loop;
@@ -2110,6 +2110,8 @@ gfc_simplify_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
          n++;
        }
     }
+  ss_ex[n] = 0;
+  hs_ex[n] = 0;
 
   if (shiftvec)
     {
@@ -2403,7 +2405,7 @@ gfc_simplify_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
   ssize_t shift_val, len;
   ssize_t count[GFC_MAX_DIMENSIONS], extent[GFC_MAX_DIMENSIONS],
     sstride[GFC_MAX_DIMENSIONS], a_extent[GFC_MAX_DIMENSIONS],
-    a_stride[GFC_MAX_DIMENSIONS], ss_ex[GFC_MAX_DIMENSIONS];
+    a_stride[GFC_MAX_DIMENSIONS], ss_ex[GFC_MAX_DIMENSIONS + 1];
   ssize_t rsoffset;
   int d, n;
   bool continue_loop;
@@ -2546,6 +2548,7 @@ gfc_simplify_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
          n++;
        }
     }
+  ss_ex[n] = 0;
 
   continue_loop = true;
   d = array->rank;