re PR fortran/20786 (Can't use AINT intrinsic with KIND parameter)

PR fortran/20786
* iresolve.c (gfc_resolve_aint, gfc_resolve_anint ): Type conversion
  of the argument.

gfortran.dg/aint_anint_1.f90: New test.

From-SVN: r105276
This commit is contained in:
Steven G. Kargl 2005-10-11 23:58:17 +00:00 committed by Steven G. Kargl
parent 4bbae09f17
commit 5dd17af574
4 changed files with 54 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2005-10-11 Steven G. Kargl <kargls@comcast.net>
PR fortran/20786
*iresolve.c (gfc_resolve_aint, gfc_resolve_anint ): Type conversion
of the argument.
2005-10-11 Jakub Jelinek <jakub@redhat.com>
* f95-lang.c (gfc_init_decl_processing): Initialize

View File

@ -105,9 +105,17 @@ gfc_resolve_aimag (gfc_expr * f, gfc_expr * x)
void
gfc_resolve_aint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
{
gfc_typespec ts;
f->ts.type = a->ts.type;
f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer);
if (a->ts.kind != f->ts.kind)
{
ts.type = f->ts.type;
ts.kind = f->ts.kind;
gfc_convert_type (a, &ts, 2);
}
/* The resolved name is only used for specific intrinsics where
the return kind is the same as the arg kind. */
f->value.function.name =
@ -143,9 +151,18 @@ gfc_resolve_all (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
void
gfc_resolve_anint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
{
gfc_typespec ts;
f->ts.type = a->ts.type;
f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer);
if (a->ts.kind != f->ts.kind)
{
ts.type = f->ts.type;
ts.kind = f->ts.kind;
gfc_convert_type (a, &ts, 2);
}
/* The resolved name is only used for specific intrinsics where
the return kind is the same as the arg kind. */
f->value.function.name =

View File

@ -1,3 +1,8 @@
2005-10-11 Steven G. Kargl <kargls@comcast.net>
PR fortran/20786
gfortran.dg/aint_anint_1.f90: New test.
2005-10-11 Steven G. Kargl <kargls@comcast.net>
PR libgfortran/24313

View File

@ -0,0 +1,26 @@
program aint_anint_1
implicit none
real(4) :: r = 42.7, r1, r2
real(8) :: s = 42.7D0, s1, s2
r1 = aint(r)
r2 = aint(r,kind=8)
if (abs(r1 - r2) > 0.1) call abort()
r1 = anint(r)
r2 = anint(r,kind=8)
if (abs(r1 - r2) > 0.1) call abort()
s1 = aint(s)
s2 = aint(s, kind=4)
if (abs(s1 - s2) > 0.1) call abort()
s1 = anint(s)
s2 = anint(s, kind=4)
if (abs(s1 - s2) > 0.1) call abort()
end program aint_anint_1