diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/fortran/iresolve.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.fortran-torture/execute/random_1.f90 | 33 |
4 files changed, 47 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ac79556..3bc1809 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2004-05-30 Steven G. Kargl <kargls@comcast.net> + + * iresolve.c (gfc_resolve_random_number): Clean up conditional. + 2004-05-29 Steven G. Kargl <kargls@comcast.net> * simplify.c (gfc_simplify_log): Remove useless line of code. diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 46e3803..f1da732 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -1363,12 +1363,15 @@ gfc_resolve_random_number (gfc_code * c ATTRIBUTE_UNUSED) int kind; kind = c->ext.actual->expr->ts.kind; - name = gfc_get_string ((c->ext.actual->expr->rank == 0) ? - PREFIX("random_r%d") : PREFIX("arandom_r%d"), - kind); + if (c->ext.actual->expr->rank == 0) + name = gfc_get_string (PREFIX("random_r%d"), kind); + else + name = gfc_get_string (PREFIX("arandom_r%d"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); } + /* Determine if the arguments to SYSTEM_CLOCK are INTEGER(4) or INTEGER(8) */ void diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ed4955f..0535cfe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-05-30 Steven G. Kargl <kargls@comcast.net> + + * gfortran.fortran-torture/execute/random_1.f90: New test. + 2004-05-28 Ziemowit Laski <zlaski@apple.com> * g++.dg/ext/altivec-10.C: New test. diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/random_1.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/random_1.f90 new file mode 100644 index 0000000..900a724 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/execute/random_1.f90 @@ -0,0 +1,33 @@ +! PR15619 +! Check that random_seed works as expected. +! Does not check the quality of random numbers, hence should never fail. +program test_random + implicit none + integer, allocatable :: seed(:) + real, dimension(10) :: a, b + integer n; + + call random_seed (size=n) + allocate (seed(n)) + + ! Exercise the generator a bit. + call random_number (a) + + ! Remeber the seed and get 10 more. + call random_seed (get=seed) + call random_number (a) + + ! Get the same 10 numbers in two blocks, remebering the seed in the middle + call random_seed (put=seed) + call random_number (b(1:5)) + call random_seed(get=seed) + call random_number (b(6:10)) + if (any (a .ne. b)) call abort + + ! Get the last 5 numbers again. + call random_seed (put=seed) + call random_number (b(6:10)) + if (any (a .ne. b)) call abort +end program + + |