aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2007-05-25 17:41:17 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2007-05-25 17:41:17 +0000
commit853c0ad7f0edc57a50c60803ea1aab588bab7561 (patch)
tree4d991d392c31ab031e319649f3159ca64311a652
parentfc6c9f75effaf7d1e793a5f5a0fa937668208972 (diff)
downloadgcc-853c0ad7f0edc57a50c60803ea1aab588bab7561.zip
gcc-853c0ad7f0edc57a50c60803ea1aab588bab7561.tar.gz
gcc-853c0ad7f0edc57a50c60803ea1aab588bab7561.tar.bz2
transfer.c (unformatted_read): Use size from front end eliminating use of size_from_real_kind.
2007-05-25 Jerry DeLisle <jvdelisle@gcc.gnu.org> * io/transfer.c (unformatted_read): Use size from front end eliminating use of size_from_real_kind. (unformatted_write): Ditto. From-SVN: r125064
-rw-r--r--libgfortran/ChangeLog5
-rw-r--r--libgfortran/io/transfer.c27
2 files changed, 15 insertions, 17 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 7ea870a..3877428 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2007-05-25 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * io/transfer.c (unformatted_read): Use size from front end eliminating
+ use of size_from_real_kind. (unformatted_write): Ditto.
+
2007-05-23 Steve Ellcey <sje@cup.hp.com>
* Makefile.in: Regenerate.
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 6d23e5e..128b4c1 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -695,7 +695,7 @@ write_buf (st_parameter_dt *dtp, void *buf, size_t nbytes)
static void
unformatted_read (st_parameter_dt *dtp, bt type,
- void *dest, int kind,
+ void *dest, int kind __attribute__((unused)),
size_t size, size_t nelems)
{
size_t i, sz;
@@ -723,40 +723,37 @@ unformatted_read (st_parameter_dt *dtp, bt type,
/* By now, all complex variables have been split into their
constituent reals. */
- if (type == BT_REAL || type == BT_COMPLEX)
- sz = size_from_real_kind (kind);
- else
- sz = kind;
-
for (i=0; i<nelems; i++)
{
- read_block_direct (dtp, buffer, &sz);
- reverse_memcpy (p, buffer, sz);
+ read_block_direct (dtp, buffer, &size);
+ reverse_memcpy (p, buffer, size);
p += size;
}
}
}
-/* Master function for unformatted writes. */
+/* Master function for unformatted writes. NOTE: For kind=10 the size is 16
+ bytes on 64 bit machines. The unused bytes are not initialized and never
+ used, which can show an error with memory checking analyzers like
+ valgrind. */
static void
unformatted_write (st_parameter_dt *dtp, bt type,
- void *source, int kind,
+ void *source, int kind __attribute__((unused)),
size_t size, size_t nelems)
{
if (dtp->u.p.current_unit->flags.convert == CONVERT_NATIVE ||
size == 1 || type == BT_CHARACTER)
{
size *= nelems;
-
write_buf (dtp, source, size);
}
else
{
char buffer[16];
char *p;
- size_t i, sz;
+ size_t i;
/* Break up complex into its constituent reals. */
if (type == BT_COMPLEX)
@@ -770,16 +767,12 @@ unformatted_write (st_parameter_dt *dtp, bt type,
/* By now, all complex variables have been split into their
constituent reals. */
- if (type == BT_REAL || type == BT_COMPLEX)
- sz = size_from_real_kind (kind);
- else
- sz = kind;
for (i=0; i<nelems; i++)
{
reverse_memcpy(buffer, p, size);
p+= size;
- write_buf (dtp, buffer, sz);
+ write_buf (dtp, buffer, size);
}
}
}