From ee5d176a88399eeb47d76f37531257b62b5f36d3 Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Date: Wed, 15 Aug 2007 12:35:57 +0000
Subject: [PATCH] re PR fortran/33077 (RANDOM_SEED failure for integer(kind=8))

	PR fortran/33077
	* intrinsics/random.c (random_seed_i8): Fix code logic.
	* gfortran.dg/random_7.f90: Initialize variable.

From-SVN: r127512
---
 gcc/testsuite/ChangeLog                | 5 +++++
 gcc/testsuite/gfortran.dg/random_7.f90 | 3 +++
 libgfortran/ChangeLog                  | 5 +++++
 libgfortran/intrinsics/random.c        | 8 ++++----
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 86abaddf632c..bde9f7394a33 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+	PR fortran/33077
+	* gfortran.dg/random_7.f90: Initialize variable.
+
 2007-08-15  Jakub Jelinek  <jakub@redhat.com>
 
 	PR middle-end/33074
diff --git a/gcc/testsuite/gfortran.dg/random_7.f90 b/gcc/testsuite/gfortran.dg/random_7.f90
index 46d8ccb88162..6435a34cf589 100644
--- a/gcc/testsuite/gfortran.dg/random_7.f90
+++ b/gcc/testsuite/gfortran.dg/random_7.f90
@@ -7,8 +7,11 @@ program trs
   integer, allocatable, dimension(:) :: seed, check
   call test_random_seed(size)
   allocate(seed(size),check(size))
+  seed(:) = huge(seed) / 17
   call test_random_seed(put=seed)
   call test_random_seed(get=check)
+  print *, seed
+  print *, check
   if (any (seed /= check)) call abort
 contains
   subroutine test_random_seed(size, put, get)
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index a74bd4481511..2305b3e9ed67 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+	PR fortran/33077
+	* intrinsics/random.c (random_seed_i8): Fix code logic.
+
 2007-08-13  Danny Smith  <dannysmit@users.sourceforge.net>
 
 	* acinclude.m4 (GTHREAD_USE_WEAK) Define to 0 for mingw32.
diff --git a/libgfortran/intrinsics/random.c b/libgfortran/intrinsics/random.c
index f64f21c5b80d..00029c5da617 100644
--- a/libgfortran/intrinsics/random.c
+++ b/libgfortran/intrinsics/random.c
@@ -731,8 +731,8 @@ random_seed_i8 (GFC_INTEGER_8 *size, gfc_array_i8 *put, gfc_array_i8 *get)
         runtime_error ("Array size of PUT is too small.");
 
       /*  This code now should do correct strides.  */
-      for (i = 0; i < kiss_size; i += 2)
-	memcpy (&kiss_seed[i], &(put->data[i * put->dim[0].stride]),
+      for (i = 0; i < kiss_size / 2; i++)
+	memcpy (&kiss_seed[2*i], &(put->data[i * put->dim[0].stride]),
 		sizeof (GFC_UINTEGER_8));
     }
 
@@ -748,8 +748,8 @@ random_seed_i8 (GFC_INTEGER_8 *size, gfc_array_i8 *put, gfc_array_i8 *get)
 	runtime_error ("Array size of GET is too small.");
 
       /*  This code now should do correct strides.  */
-      for (i = 0; i < kiss_size; i += 2)
-	memcpy (&(get->data[i * get->dim[0].stride]), &kiss_seed[i],
+      for (i = 0; i < kiss_size / 2; i++)
+	memcpy (&(get->data[i * get->dim[0].stride]), &kiss_seed[2*i],
 		sizeof (GFC_UINTEGER_8));
     }
 
-- 
GitLab