summaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>2007-05-25 17:41:17 +0000
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>2007-05-25 17:41:17 +0000
commita682a24e173477f7dc4dd53fb75316959e510019 (patch)
tree4d991d392c31ab031e319649f3159ca64311a652 /libgfortran
parent75bbc19a81d94bdcbbe6f457ac17bd3939fbdfb6 (diff)
downloadgcc-a682a24e173477f7dc4dd53fb75316959e510019.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125064 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-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 7ea870abf09..38774284d24 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 6d23e5e81b9..128b4c1be59 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);
}
}
}