This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/77400] New: fortran compfails on random_seed(PUT) if seed size is less than 33
- From: "saguryev.gnu at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 29 Aug 2016 11:22:34 +0000
- Subject: [Bug fortran/77400] New: fortran compfails on random_seed(PUT) if seed size is less than 33
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77400
Bug ID: 77400
Summary: fortran compfails on random_seed(PUT) if seed size is
less than 33
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: saguryev.gnu at gmail dot com
CC: aivchenk at gmail dot com, saguryev.gnu at gmail dot com,
unassigned at gcc dot gnu.org
Target Milestone: ---
Starting from 12th Aug 2016, fortran compfails on random_seed(PUT=seed) as
follows if seed size is less than 33 (with expected size 12 which had been
working so far as long as in release branches) :
sh-4.3$ gfortran ttt2.f90 -o ttt2
ttt2.f90:14:30:
call random_seed (PUT=seed)
1
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small
(24/33)
It's interesting that random_seed(SIZE=.. ) still report that expected seed
size is 12, not 33.
The problem was brought in by r239356, probably in this place:
--- gcc/fortran/check.c (revision 239355)
+++ gcc/fortran/check.c (revision 239356)
@@ -5527,17 +5527,15 @@
......
+ part of the state too. */
+ seed_size = 128 / gfc_default_integer_kind + 1;
......
if (gfc_array_size (put, &put_size)
- && mpz_get_ui (put_size) < kiss_size)
+ && mpz_get_ui (put_size) < seed_size)
Full test:
sh-4.3$ cat ttt2.f90
program random_seed_test
! integer, dimension (34) :: seed
integer, dimension (24) :: seed
integer :: s
real * 8 :: r
seed=0
seed(2)=12
seed(3)=235
call random_seed (size=s )
print *, 'Random seed() size == ', s
call random_seed (PUT=seed)
call random_number (r)
! print *, seed
print *, r
end
<EOR>