On Fri, Jan 4, 2013 at 11:35 PM, Andreas Schwab <sch...@linux-m68k.org> wrote:
> 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?

It looks like one.  Why not simply do

   m4 = (GFC_INTEGER_4) u32;

?  I suppose GFC_INTEGER_4 is always the same size as uint32_t but signed?

Richard.

>
> 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