[Development] Qt 5.2 header diff: QtXmlPatterns
olivier at woboq.com
Tue Nov 5 13:00:01 CET 2013
On Tuesday 05 November 2013 12:24:32 Marc Mutz wrote:
> On Tuesday, November 05, 2013 01:07:32 Thiago Macieira wrote:
> > - return (void *)qptrdiff(data);
> > + char *null = 0;
> > + return null + qptrdiff(data);
> Since this is equivalent to
> return 0[qptrdiff(data)];
> isn't that dereferencing the nullptr and therefore undefined behaviour?
That's indeed an undefined behaviour.
The compiler is allowed to optimize this function by removing it.
> What's wrong with
Yes, that's how it should be.
> Or simply
> return ptr;
> which forms a union with `data`?
No, that does not work. ptr is never actually used, and can never be used.
That's because storing the pointer is not done using ptr, but it is done with
data = qptrdiff(somePointer); (indirectly via
As a result, if one store for example the pointer 0xabcdef00 on a 32bit big
endian machine, it would result in memory:
with data = 0x00000000abcdef00 as expected, but ptr = 0
Woboq - Qt services and support - http://woboq.com - http://code.woboq.org
More information about the Development