diff options
author | Steve Ellcey <sje@cup.hp.com> | 2005-08-31 16:58:28 +0000 |
---|---|---|
committer | Steve Ellcey <sje@gcc.gnu.org> | 2005-08-31 16:58:28 +0000 |
commit | 2efa12b3408a728965511a8927e1f7abc47f2ed0 (patch) | |
tree | 6050398543fbd94e4ceab8d5f470c8381bdfdf7d | |
parent | 35210087ce96f4184603fe4332fb4d87da94d569 (diff) | |
download | gcc-2efa12b3408a728965511a8927e1f7abc47f2ed0.zip gcc-2efa12b3408a728965511a8927e1f7abc47f2ed0.tar.gz gcc-2efa12b3408a728965511a8927e1f7abc47f2ed0.tar.bz2 |
re PR target/23556 (FAIL: gfortran.dg/pr18122.f90)
PR target/23556
* io/read.c (convert_real): Use memcpy to fill buffer.
From-SVN: r103685
-rw-r--r-- | libgfortran/ChangeLog | 5 | ||||
-rw-r--r-- | libgfortran/io/read.c | 24 |
2 files changed, 23 insertions, 6 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 98ae306..44a9fcf 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2005-08-31 Steve Ellcey <sje@cup.hp.com> + + PR target/23556 + * io/read.c (convert_real): Use memcpy to fill buffer. + 2005-08-29 Thomas Koenig <Thomas.Koenig@online.de> PR libfortran/23598 diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c index b127cd9..e37224d 100644 --- a/libgfortran/io/read.c +++ b/libgfortran/io/read.c @@ -124,24 +124,36 @@ convert_real (void *dest, const char *buffer, int length) switch (length) { case 4: - *((GFC_REAL_4 *) dest) = + { + GFC_REAL_4 tmp = #if defined(HAVE_STRTOF) - strtof (buffer, NULL); + strtof (buffer, NULL); #else - (GFC_REAL_4) strtod (buffer, NULL); + (GFC_REAL_4) strtod (buffer, NULL); #endif + memcpy (dest, (void *) &tmp, length); + } break; case 8: - *((GFC_REAL_8 *) dest) = strtod (buffer, NULL); + { + GFC_REAL_8 tmp = strtod (buffer, NULL); + memcpy (dest, (void *) &tmp, length); + } break; #if defined(HAVE_GFC_REAL_10) && defined (HAVE_STRTOLD) case 10: - *((GFC_REAL_10 *) dest) = strtold (buffer, NULL); + { + GFC_REAL_10 tmp = strtold (buffer, NULL); + memcpy (dest, (void *) &tmp, length); + } break; #endif #if defined(HAVE_GFC_REAL_16) && defined (HAVE_STRTOLD) case 16: - *((GFC_REAL_16 *) dest) = strtold (buffer, NULL); + { + GFC_REAL_16 tmp = strtold (buffer, NULL); + memcpy (dest, (void *) &tmp, length); + } break; #endif default: |