if (!kind_value_check (put, 1, gfc_default_integer_kind))
return false;
- if (gfc_array_size (put, &put_size)
- && mpz_get_ui (put_size) < seed_size)
- gfc_error ("Size of %qs argument of %qs intrinsic at %L "
- "too small (%i/%i)",
- gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
- &put->where, (int) mpz_get_ui (put_size), seed_size);
+ if (gfc_array_size (put, &put_size))
+ {
+ if (mpz_get_ui (put_size) < seed_size)
+ gfc_error ("Size of %qs argument of %qs intrinsic at %L "
+ "too small (%i/%i)",
+ gfc_current_intrinsic_arg[1]->name,
+ gfc_current_intrinsic,
+ &put->where, (int) mpz_get_ui (put_size), seed_size);
+ mpz_clear (put_size);
+ }
}
if (get != NULL)
if (!kind_value_check (get, 2, gfc_default_integer_kind))
return false;
- if (gfc_array_size (get, &get_size)
- && mpz_get_ui (get_size) < seed_size)
- gfc_error ("Size of %qs argument of %qs intrinsic at %L "
- "too small (%i/%i)",
- gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
- &get->where, (int) mpz_get_ui (get_size), seed_size);
+ if (gfc_array_size (get, &get_size))
+ {
+ if (mpz_get_ui (get_size) < seed_size)
+ gfc_error ("Size of %qs argument of %qs intrinsic at %L "
+ "too small (%i/%i)",
+ gfc_current_intrinsic_arg[2]->name,
+ gfc_current_intrinsic,
+ &get->where, (int) mpz_get_ui (get_size), seed_size);
+ mpz_clear (get_size);
+ }
}
/* RANDOM_SEED may not have more than one non-optional argument. */
/* If this can be determined, check that the target must be at least as
large as the pointer assigned to it is. */
- if (gfc_array_size (lvalue, &lsize)
- && gfc_array_size (rvalue, &rsize)
- && mpz_cmp (rsize, lsize) < 0)
+ bool got_lsize = gfc_array_size (lvalue, &lsize);
+ bool got_rsize = got_lsize && gfc_array_size (rvalue, &rsize);
+ bool too_small = got_rsize && mpz_cmp (rsize, lsize) < 0;
+
+ if (too_small)
{
gfc_error ("Rank remapping target is smaller than size of the"
" pointer (%ld < %ld) at %L",
mpz_get_si (rsize), mpz_get_si (lsize),
&lvalue->where);
+ mpz_clear (lsize);
+ mpz_clear (rsize);
return false;
}
+ if (got_lsize)
+ mpz_clear (lsize);
+ if (got_rsize)
+ mpz_clear (rsize);
/* An assumed rank target is an experimental F202y feature. */
if (rvalue->rank == -1 && !(gfc_option.allow_std & GFC_STD_F202Y))