aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanne Blomqvist <jb@gcc.gnu.org>2012-06-21 21:47:01 +0300
committerJanne Blomqvist <jb@gcc.gnu.org>2012-06-21 21:47:01 +0300
commit67eb28c8b8081b781c04e368766dab06fa13ed15 (patch)
tree59aa2323ea68faca7af3c3ce061a65ad40e8ebb7
parent5175cbafd2640d15304558c02e66642aa94e34b5 (diff)
downloadgcc-67eb28c8b8081b781c04e368766dab06fa13ed15.zip
gcc-67eb28c8b8081b781c04e368766dab06fa13ed15.tar.gz
gcc-67eb28c8b8081b781c04e368766dab06fa13ed15.tar.bz2
PR 39654 FTELL intrinsic function return type.
frontend ChangeLog: 2012-06-21 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/39654 * iresolve.c (gfc_resolve_ftell): Fix result kind and use new library function. library ChangeLog: 2012-06-21 Janne Blomqvist <jb@gcc.gnu.org> PR fortran/39654 * io/intrinsics.c (ftell2): New function. * gfortran.map (_gfortran_ftell2): Export function. From-SVN: r188858
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/iresolve.c4
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/gfortran.map5
-rw-r--r--libgfortran/io/intrinsics.c20
5 files changed, 39 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ef2dc36..f326572 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-21 Janne Blomqvist <jb@gcc.gnu.org>
+
+ PR fortran/39654
+ * iresolve.c (gfc_resolve_ftell): Fix result kind and use new
+ library function.
+
2012-06-18 Tobias Burnus <burnus@net-b.de>
* intrinsic.h (gfc_resolve_rank): New prototype.
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c
index 2a49455..6d1e8b2 100644
--- a/gcc/fortran/iresolve.c
+++ b/gcc/fortran/iresolve.c
@@ -2480,7 +2480,7 @@ gfc_resolve_ftell (gfc_expr *f, gfc_expr *u)
gfc_clear_ts (&ts);
f->ts.type = BT_INTEGER;
- f->ts.kind = gfc_index_integer_kind;
+ f->ts.kind = gfc_intio_kind;
if (u->ts.kind != gfc_c_int_kind)
{
ts.type = BT_INTEGER;
@@ -2490,7 +2490,7 @@ gfc_resolve_ftell (gfc_expr *f, gfc_expr *u)
gfc_convert_type (u, &ts, 2);
}
- f->value.function.name = gfc_get_string (PREFIX ("ftell"));
+ f->value.function.name = gfc_get_string (PREFIX ("ftell2"));
}
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6f204f1..96a8e8b 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-21 Janne Blomqvist <jb@gcc.gnu.org>
+
+ PR fortran/39654
+ * io/intrinsics.c (ftell2): New function.
+ * gfortran.map (_gfortran_ftell2): Export function.
+
2012-06-04 Robert Mason <rbmj@verizon.net>
Janne Blomqvist <jb@gcc.gnu.org>
diff --git a/libgfortran/gfortran.map b/libgfortran/gfortran.map
index 211db00..217d2a3 100644
--- a/libgfortran/gfortran.map
+++ b/libgfortran/gfortran.map
@@ -1189,6 +1189,11 @@ GFORTRAN_1.4 {
_gfortran_eoshift2_16_char4;
} GFORTRAN_1.3;
+GFORTRAN_1.5 {
+ global:
+ _gfortran_ftell2;
+} GFORTRAN_1.4;
+
F2C_1.0 {
global:
_gfortran_f2c_specific__abs_c4;
diff --git a/libgfortran/io/intrinsics.c b/libgfortran/io/intrinsics.c
index 576434a..9abadae 100644
--- a/libgfortran/io/intrinsics.c
+++ b/libgfortran/io/intrinsics.c
@@ -272,6 +272,10 @@ gf_ftell (int unit)
return ret;
}
+
+/* Here is the ftell function with an incorrect return type; retained
+ due to ABI compatibility. */
+
extern size_t PREFIX(ftell) (int *);
export_proto_np(PREFIX(ftell));
@@ -281,6 +285,22 @@ PREFIX(ftell) (int * unit)
return gf_ftell (*unit);
}
+
+/* Here is the ftell function with the correct return type, ensuring
+ that large files can be supported as long as the target supports
+ large integers; as of 4.8 the FTELL intrinsic function will call
+ this one instead of the old ftell above. */
+
+extern GFC_IO_INT PREFIX(ftell2) (int *);
+export_proto_np(PREFIX(ftell2));
+
+GFC_IO_INT
+PREFIX(ftell2) (int * unit)
+{
+ return gf_ftell (*unit);
+}
+
+
#define FTELL_SUB(kind) \
extern void ftell_i ## kind ## _sub (int *, GFC_INTEGER_ ## kind *); \
export_proto(ftell_i ## kind ## _sub); \