diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/iresolve.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/aint_anint_1.f90 | 26 |
4 files changed, 54 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9da5b94..85b6ce8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 195f05e..6c23d4a 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -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 = diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d21780a..340cfa3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 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 gfortran.dg/csqrt.f: New test. diff --git a/gcc/testsuite/gfortran.dg/aint_anint_1.f90 b/gcc/testsuite/gfortran.dg/aint_anint_1.f90 new file mode 100644 index 0000000..179748c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/aint_anint_1.f90 @@ -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 + |