Weird strict-aliasing break
Andrew Haley
aph@redhat.com
Mon May 30 18:47:00 GMT 2011
On 05/30/2011 01:33 PM, Thibault Castel wrote:
>> ---------- Message transféré ----------
>> From: Steffen Dettmer <steffen.dettmer@googlemail.com>
>> To: gcc-help@gcc.gnu.org
>> Date: Mon, 30 May 2011 13:59:51 +0200
>> Subject: Re: Weird strict-aliasing break
>> On Mon, May 30, 2011 Thibault Castel <thibault.castel@gmail.com> wrote:
>>> I have a weird warning when compiling my program with g++:
>>> "dereferencing pointer âNAMEâ does break strict-aliasing rules"
>>>
>>> So, I tried to investigate a little bit and find some clues : I do a
>>> memory mapping from a char buffer to a C struct to have access to
>>> different datas into the buffer. Pretty casual. But, when I try to
>>> access one of my inner field, the warning triggers... Huh...
>>
>> Beside that this may have other disadvantages, such as depending
>> on byte order, padding and alighnment issues, in general you
>> cannot assume that constructions like:
>>
>> struct s {
>> int a; // or int32_t
>> };
>> char buffer[];
>>
>> struct s *p = buffer; p->a;
>> struct s *p = buffer+1; p->a;
>>
>> this even may crash (we had such problems on some ARM CPUs).
>>
>
> Yes, we have some ARM CPUs as targets but specific code (with such
> aligment adaptations) are used. The code I provided is x86 targeted
> only ;)
>
>> I think better here is using memcpy, but still "you have to know
>> what you are doing".
>
> No, because I don't want to copy anything. I just need to access
> fields for reading and extracting data. I don't write into it. It's
> really just a memory mapping.
You're still better off with memcpy. There's no loss of efficiency,
and it'll be legal C++.
Andrew.
More information about the Gcc-help
mailing list