On 12/18/2015 11:07 PM, Jakub Jelinek wrote:
On Fri, Dec 18, 2015 at 10:40:40PM +0300, Yury Gribov wrote:
So it seems most people generally agree that self-comparisons (cmp(x,x) ==
0) are useless and don't need to be checked or fixed. What about ensuring
symmetry i.e. that cmp(x, y) == -cmp(y, x) forall x, y? One of the bugs
(pair_cmp in fortran/interface.c) is exactly about this.
Ensuring symmetry for x != y is of course very much desirable.
So, if you could change your qsort interposer so that it for each comparison
x != y calls both cmp (x, y) and cmp (y, x) and asserts that
int r = cmp (x, y);
int ir = cmp (y, x);
if (r > 0) assert (ir < 0);
else if (r < 0) assert (ir > 0);
else assert (ir == 0);
it would be greatly appreciated. Note, the standard only talks about < 0, 0
and > 0, so it is fine if cmp (x, y) returns 231 and cmp (y, x) returns -142.
Sure, I've already bumped into this with other projects.
I'll update my checker and get back with a reduced patchset then.
/Yura