diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/check.c | 5 | ||||
-rw-r--r-- | gcc/fortran/intrinsic.texi | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/random_seed_1.f90 | 7 |
5 files changed, 22 insertions, 11 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 05e5ba5..7131d0f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-08-13 Janne Blomqvist <jb@gcc.gnu.org> + + PR fortran/91414 + * check.c (gfc_check_random_seed): Reduce seed_size. + * intrinsic.texi (RANDOM_NUMBER): Update to match new PRNG. + 2019-08-12 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/91424 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 370a3c8..2bd8bc3 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -6484,9 +6484,8 @@ gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get) mpz_t put_size, get_size; /* Keep the number of bytes in sync with master_state in - libgfortran/intrinsics/random.c. +1 due to the integer p which is - part of the state too. */ - seed_size = 128 / gfc_default_integer_kind + 1; + libgfortran/intrinsics/random.c. */ + seed_size = 32 / gfc_default_integer_kind; if (size != NULL) { diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index f390761..3aa068d 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -11792,10 +11792,10 @@ end program test_random_seed Returns a single pseudorandom number or an array of pseudorandom numbers from the uniform distribution over the range @math{ 0 \leq x < 1}. -The runtime-library implements the xorshift1024* random number -generator (RNG). This generator has a period of @math{2^{1024} - 1}, -and when using multiple threads up to @math{2^{512}} threads can each -generate @math{2^{512}} random numbers before any aliasing occurs. +The runtime-library implements the xoshiro256** pseudorandom number +generator (PRNG). This generator has a period of @math{2^{256} - 1}, +and when using multiple threads up to @math{2^{128}} threads can each +generate @math{2^{128}} random numbers before any aliasing occurs. Note that in a multi-threaded program (e.g. using OpenMP directives), each thread will have its own random number state. For details of the @@ -11852,7 +11852,7 @@ called either without arguments or with the @var{PUT} argument, the given seed is copied into a master seed as well as the seed of the current thread. When a new thread uses @code{RANDOM_NUMBER} for the first time, the seed is copied from the master seed, and forwarded -@math{N * 2^{512}} steps to guarantee that the random stream does not +@math{N * 2^{128}} steps to guarantee that the random stream does not alias any other stream in the system, where @var{N} is the number of threads that have used @code{RANDOM_NUMBER} so far during the program execution. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b8ed3a..9326a92 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-08-13 Janne Blomqvist <jb@gcc.gnu.org> + + PR fortran/91414 + * gfortran.dg/random_seed_1.f90: Update to match new seed size. + 2019-08-13 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/discr56.adb, gnat.dg/discr56.ads, diff --git a/gcc/testsuite/gfortran.dg/random_seed_1.f90 b/gcc/testsuite/gfortran.dg/random_seed_1.f90 index 39c81ce..a97e530 100644 --- a/gcc/testsuite/gfortran.dg/random_seed_1.f90 +++ b/gcc/testsuite/gfortran.dg/random_seed_1.f90 @@ -10,11 +10,12 @@ PROGRAM random_seed_1 IMPLICIT NONE - INTEGER, PARAMETER :: nbytes = 128 + ! Should match sizeof(master_state) in + ! libgfortran/intrinsics/random.c + INTEGER, PARAMETER :: nbytes = 32 - ! +1 due to the special 'p' value in xorshift1024* ! '+1' to avoid out-of-bounds warnings - INTEGER, PARAMETER :: n = nbytes / KIND(n) + 2 + INTEGER, PARAMETER :: n = nbytes / KIND(n) + 1 INTEGER, DIMENSION(n) :: seed ! Get seed, array too small |