summaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorDennis Wassel <dennis.wassel@gmail.com>2008-11-01 10:24:15 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2008-11-01 10:24:15 +0000
commit1b867ae782244908713c24c26f526e65a35f6d12 (patch)
treefef36684aa65e3fb961b23c40e1c912fdfd94a53 /gcc/fortran
parentf9fd1e7778343ad0063bac8a10232d214d68f6f2 (diff)
downloadgcc-1b867ae782244908713c24c26f526e65a35f6d12.tar.gz
re PR fortran/37159 (RANDOM_SEED: GET= check array size at compile time and respect -fdefault-integer-*)
2008-11-01 Dennis Wassel <dennis.wassel@gmail.com> PR fortran/37159 * fortran/check.c (gfc_check_random_seed): Check PUT size at compile time. 2008-11-01 Dennis Wassel <dennis.wassel@gmail.com> PR fortran/37159 * intrinsics/random.c: Added comment to adapt check.c, should kiss_size change. Few cosmetic changes to existing comments. 2008-11-01 Dennis Wassel <dennis.wassel@gmail.com> PR fortran/37159 * gfortran.dg/random_seed_1.f90: New testcase. From-SVN: r141511
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/check.c15
2 files changed, 20 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f7f763f9767..8f0e58d1548 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2008-11-01 Dennis Wassel <dennis.wassel@gmail.com>
+
+ PR fortran/37159
+ * fortran/check.c (gfc_check_random_seed): Check PUT size
+ at compile time.
+
2008-10-31 Mikael Morin <mikael.morin@tele2.fr>
PR fortran/35840
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 1f9ce2fff6a..de507676491 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -3120,9 +3120,16 @@ gfc_check_random_number (gfc_expr *harvest)
gfc_try
gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
{
- unsigned int nargs = 0;
+ unsigned int nargs = 0, kiss_size;
locus *where = NULL;
+ mpz_t put_size;
+ bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
+ have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
+
+ /* Keep these values in sync with kiss_size in libgfortran/random.c. */
+ kiss_size = have_gfc_real_16 ? 12 : 8;
+
if (size != NULL)
{
if (size->expr_type != EXPR_VARIABLE
@@ -3162,6 +3169,12 @@ gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
return FAILURE;
+
+ if (gfc_array_size (put, &put_size) == SUCCESS
+ && mpz_get_ui (put_size) < kiss_size)
+ gfc_error ("Array PUT of intrinsic %s is too small (%i/%i) at %L",
+ gfc_current_intrinsic, (int) mpz_get_ui (put_size),
+ kiss_size, where);
}
if (get != NULL)