On 05.03.2011 11:55, Branko Čibej wrote:
> On 05.03.2011 11:34, Stefan Fuhrmann wrote:
>> I suspect that -fstrict-aliasing (or something similar)
>> might have broken svn_temp_deserializer__resolve().
>> r1078256 tries to circumvent that.
> Ahem. Type casting will not help, at least GCC's optimizer sees right
> through them.
Well, my hypothesis is that the optimizer breaks the
code *due to* the casting:
*(const char**)ptr = buffer + (size_t)*ptr;
assert(*ptr > buffer);
temp1 = *ptr;
*ptr = buffer + temp1;
assert(temp1 > buffer);
I would consider that a bug but I rearranged the code
such that it should produce the desired result even
in the presence of these issues:
const char *target = buffer + *(size_t*)ptr1;
assert(target > buffer); // this is the key
*(const char**)ptr = target;
> The thing to do is to not play silly buggers with type
> punning in the first place. :)
Sometimes you have to. But one should strive to
limit these instances.
Received on 2011-03-05 19:53:23 CET