aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/iresolve.c17
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/aint_anint_1.f9026
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
+