Janne Blomqvist <blomqvist.ja...@gmail.com> writes:

> diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c
> index c8ecc3a..bf2250a 100644
> --- a/libgfortran/io/file_pos.c
> +++ b/libgfortran/io/file_pos.c
> @@ -140,15 +140,21 @@ unformatted_backspace (st_parameter_filepos *fpp, 
> gfc_unit *u)
>       }
>        else
>       {
> +       uint32_t u32;
> +       uint64_t u64;
>         switch (length)
>           {
>           case sizeof(GFC_INTEGER_4):
> -           reverse_memcpy (&m4, p, sizeof (m4));
> +           memcpy (&u32, p, sizeof (u32));
> +           u32 = __builtin_bswap32 (u32);
> +           m4 = *(GFC_INTEGER_4*)&u32;

Isn't that an aliasing violation?

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Reply via email to