On Tuesday 2010-03-09 21:39, Alan Pevec wrote:
>> On Tue, Feb 16, 2010 at 09:16:47PM +0100, Alan Pevec wrote:
>>> -             int pos = *(int *)t->data;
>>> +             const unsigned char *data = t->data;
>>> +             int pos = *(const int *)data;
>>
>> I have to admit these changes look a bit like "cast to different types
>> until the compiler is confused", but I don't see any problem arising
>> from those casts either. So if it's fixing a problem for you, it's fine
>> by me. I've applied the changes to the collectd-4.8 branch.
>
>Thanks!
>Well, this was breaking collectd build in Fedora, so I just took the
>upstream patch without much thinking.
>strict-aliasing is confusing indeed, AFAICT solution by Jan is that
>char* is special and may refer any type.

No, the special type you are talking about is void *.

Anyway, the issue here was/is is that gcc did not seem to be able
to track strictness across (int *)t->data, which is why the
assignment was split. The const was only added as a correctness
bonus and did not, as far as I can remember, contribute or fix
the problem either way. It was really the split-into-two-operations.

_______________________________________________
collectd mailing list
collectd@verplant.org
http://mailman.verplant.org/listinfo/collectd

Reply via email to