This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/77400] New: fortran compfails on random_seed(PUT) if seed size is less than 33


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>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]