aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog4
-rw-r--r--gcc/fortran/iresolve.c9
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/random_1.f9033
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
+
+