This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Why does gcc4 dislike this code?
On Wed, Jun 18, 2008 at 19:16, walt <w41ter@gmail.com> wrote:
> Brian Dessent wrote:
>>
>> walt wrote:
>>
>>> *((unsigned long int *) tmp)++ = *((unsigned long int *) b1)++;
>>>
>>> error: invalid lvalue in increment
>
>> The lvalue cast was a nonstandard gcc extension that was removed in 3.4;
>> in other words this is not valid standard C/C++.
>>
>> http://gcc.gnu.org/gcc-3.4/changes.html
>
> Wow, that was fast, thanks. I'm quite sure I'd never write code
> like that in the first place, mostly because it would never occur
> to me to try it. If you had to fix that code, how would you do it?
>
memcpy(tmp, b1, sizeof(long));
tmp += sizeof(long);
b1 += sizeof(long);
(assuming tmp and b1 are char*)
Reading and writing through those casts are likely a violation of
strict-aliasing anyways.