[Development] Should QVariant be doing fuzzy comparisons on doubles?
Mathias Hasselmann
mathias at taschenorakel.de
Wed Sep 21 08:01:22 CEST 2016
Am 20.09.2016 um 12:44 schrieb Olivier Goffart:
> On Dienstag, 20. September 2016 12:21:11 CEST Mathias Hasselmann wrote:
>> Am 19.09.2016 um 23:27 schrieb Olivier Goffart:
>>> We really cannot have a qHash for QVariant anyway, because that would
>>> imply
>>> that ALL QVariant can be hashed, and compared. Which is not the case. Most
>>> custom types don't even register comparator function.
>>
>> Which actually is quite a serious issue, as we do a simply memcmp() on
>> such custom types, which simply won't work if your custom data structure
>> contains uninitialized memory from alignment padding.
>
> We don't do that. We just return false in that case.
Valgrind is telling a different story. It blames uninitialized memory
access via memcpy() when comparing custom types without registered
compare operator. Those types are gadgets, maybe that's making the
difference.
As much as I'd like to debug this code now to prove me right, I sadly
have deadlines to meet this week. So I have to behave myself to not dig
up the code right now. Maybe later. Or someone else.
>> It is easy to forget registering comparator functions and currently Qt
>> doesn't help in debugging such issues. So I wonder if QVariant should
>> forbid comparison of custom types without having a comparator function
>> registered.
>
> That's a source incompatible change.
No, it's not. It's changing undefined behavior into defined behavior.
Ciao,
Mathias
More information about the Development
mailing list