aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargls@comcast.net>2006-03-26 05:20:09 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2006-03-26 05:20:09 +0000
commit6110b776bc55be34d41be51821d6723a94e120c0 (patch)
tree3bed4db4af247fc165f3ea184471aa5961edbdbd
parent0853054e96b9be76be424b0bdde28a54305fdd60 (diff)
downloadgcc-6110b776bc55be34d41be51821d6723a94e120c0.zip
gcc-6110b776bc55be34d41be51821d6723a94e120c0.tar.gz
gcc-6110b776bc55be34d41be51821d6723a94e120c0.tar.bz2
re PR fortran/26816 ([4.1 only] FLOAT Intrinsic does not work with Integer Halfword input)
PR fortran/26816 * intrinsic.c (add_functions): Allow FLOAT to accept all integer kinds. * intrinsic.texi: Document FLOAT. * gfortran.dg/float_1.f90: New test. From-SVN: r112392
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/intrinsic.c2
-rw-r--r--gcc/fortran/intrinsic.texi36
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/float_1.f9012
5 files changed, 60 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5937e09a..e5245db 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2006-03-25 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/26816
+ * intrinsic.c (add_functions): Allow FLOAT to accept all integer kinds.
+ * intrinsic.texi: Document FLOAT.
+
2006-03-25 Thomas Koenig <Thomas.Koenig@online.de>
PR fortran/26769
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index 56f92a2..707fe5b 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -1899,7 +1899,7 @@ add_functions (void)
a, BT_UNKNOWN, dr, REQUIRED);
add_sym_1 ("float", 1, 0, BT_REAL, dr, GFC_STD_F77,
- NULL, gfc_simplify_float, NULL,
+ gfc_check_i, gfc_simplify_float, NULL,
a, BT_INTEGER, di, REQUIRED);
add_sym_1 ("sngl", 1, 0, BT_REAL, dr, GFC_STD_F77,
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index 81a56f5..5942329 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -88,6 +88,7 @@ and editing. All contributions and corrections are strongly encouraged.
* @code{EXP}: EXP, Exponential function
* @code{EXPONENT}: EXPONENT, Exponent function
* @code{FDATE}: FDATE, Subroutine (or function) to get the current time as a string
+* @code{FLOAT}: FLOAT, Convert integer to default real
* @code{FLOOR}: FLOOR, Integer floor function
* @code{FNUM}: FNUM, File number function
* @code{FREE}: FREE, Memory de-allocation subroutine
@@ -2842,6 +2843,41 @@ end program test_fdate
@end smallexample
@end table
+@node FLOAT
+@section @code{FLOAT} --- Convert integer to default real
+@findex @code{FLOAT} intrinsic
+@cindex floor
+
+@table @asis
+@item @emph{Description}:
+@code{FLOAT(I)} converts the integer @var{I} to a default real value.
+
+@item @emph{Option}:
+gnu
+
+@item @emph{Class}:
+function
+
+@item @emph{Syntax}:
+@code{X = FLOAT(I)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
+@item @emph{Return value}:
+The return value is of type default @code{REAL}
+
+@item @emph{Example}:
+@smallexample
+program test_float
+ integer :: i = 1
+ if (float(i) /= 1.) call abort
+end program test_float
+@end smallexample
+@end table
+
@node FLOOR
@section @code{FLOOR} --- Integer floor function
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 30d523e..2a9840b8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-03-25 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/26816
+ * gfortran.dg/float_1.f90: New test.
+
2006-03-25 Steven G. Kargl <kargsl@comcast.net>
* gfortran.dg/transfer_array_intrinsic_1.f90: Restrict to i?86 and
diff --git a/gcc/testsuite/gfortran.dg/float_1.f90 b/gcc/testsuite/gfortran.dg/float_1.f90
new file mode 100644
index 0000000..224d31d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/float_1.f90
@@ -0,0 +1,12 @@
+! { dg-do run }
+! PR fortran/26816
+program test_float
+ integer(1) :: i1 = 1
+ integer(2) :: i2 = 1
+ integer(4) :: i4 = 1
+ integer(8) :: i8 = 1
+ if (float(i1) /= 1.) call abort
+ if (float(i2) /= 1.) call abort
+ if (float(i4) /= 1.) call abort
+ if (float(i8) /= 1.) call abort
+end program test_float