Make shift argument to eoshift0 and eoshift2 be of type index_type
authorJanne Blomqvist <jb@gcc.gnu.org>
Wed, 22 Nov 2017 20:42:39 +0000 (22:42 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Wed, 22 Nov 2017 20:42:39 +0000 (22:42 +0200)
Test case that requires 4 GB RAM that exercises eoshift0:

program main
  implicit none
  integer(1) :: line(2_8**31+10)
  line = 42
  line = eoshift(line, 2_8**31+7)
  print *, line(1:4)
  print *, line((ubound(line, 1, kind=8)-4):ubound(line, 1, kind=8))
end program main

Before patch:
❯ ./a.out
    0    0    0    0
    42   42   42   42   42

With patch:
❯ ./a.out
   42   42   42    0
   0    0    0    0    0

Regtested on x86_64-pc-linux-gnu.

libgfortran/ChangeLog:

2017-11-22  Janne Blomqvist  <jb@gcc.gnu.org>

        * intrinsics/eoshift0.c (eoshift0): Make shift an index_type.
        * intrinsics/eoshift2.c (eoshift2): Make shift an index_type.

From-SVN: r255077

libgfortran/ChangeLog
libgfortran/intrinsics/eoshift0.c
libgfortran/intrinsics/eoshift2.c

index 6df2843b9fb5ca68c16db458d7b72305681c2954..7715cb3e8f2283e9ed3592f691ef96469c6ed674 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-22  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       * intrinsics/eoshift0.c (eoshift0): Make shift an index_type.
+        * intrinsics/eoshift2.c (eoshift2): Make shift an index_type.
+
 2017-11-22  Janne Blomqvist  <jb@gcc.gnu.org>
 
        PR libfortran/83097
index 3dae88c3757cb33af69545be904f8c3291a623e6..dd8c81d6a05183b4c4c4083894b2cfe380eb4547 100644 (file)
@@ -26,12 +26,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "libgfortran.h"
 #include <string.h>
 
-/* TODO: make this work for large shifts when
-   sizeof(int) < sizeof (index_type).  */
 
 static void
 eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
-         int shift, const char * pbound, int which, index_type size,
+         index_type shift, const char * pbound, int which, index_type size,
          const char *filler, index_type filler_len)
 {
   /* r.* indicates the return array.  */
index 5d949dda8bbe1b332ffb5cb5bfb79024c990ba23..ab760f768a55fc82c9de4544634acf83d88c0b67 100644 (file)
@@ -26,12 +26,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "libgfortran.h"
 #include <string.h>
 
-/* TODO: make this work for large shifts when
-   sizeof(int) < sizeof (index_type).  */
 
 static void
 eoshift2 (gfc_array_char *ret, const gfc_array_char *array,
-         int shift, const gfc_array_char *bound, int which,
+         index_type shift, const gfc_array_char *bound, int which,
          const char *filler, index_type filler_len)
 {
   /* r.* indicates the return array.  */