------- Comment #3 from kargl at gcc dot gnu dot org 2009-10-15 03:55 -------
(In reply to comment #1)
> Try this patch. Does it give reasonable results? Does endianess matter here?
>
> Index: write.c
> ===================================================================
> --- write.c (revision 152697)
> +++ write.c (working copy)
> @@ -392,9 +392,10 @@
> }
> break;
> #ifdef HAVE_GFC_INTEGER_16
> + case 10:
> case 16:
> {
> - GFC_INTEGER_16 tmp;
> + GFC_INTEGER_16 tmp = 0;
> memcpy ((void *) &tmp, p, len);
> i = tmp;
> }
> @@ -446,9 +447,10 @@
> }
> break;
> #ifdef HAVE_GFC_INTEGER_16
> + case 10:
> case 16:
> {
> - GFC_INTEGER_16 tmp;
> + GFC_INTEGER_16 tmp = 0;
> memcpy ((void *) &tmp, p, len);
> i = (GFC_UINTEGER_16) tmp;
> }
>
The patch is fine for 64-bit architectures. On 32-bit architectures
such as i686-*-freebsd the patch fails because there is a REAL(10)
but no INTEGER(16). Truncating to INTEGER(*) would seem appealing
except that I was specifically interested in the bits on the last
few bytes. :(
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41711