libctf: fix assertion failure with no system qsort_r
authorNick Alcock <nick.alcock@oracle.com>
Mon, 23 Jan 2023 13:11:32 +0000 (13:11 +0000)
committerNick Alcock <nick.alcock@oracle.com>
Fri, 24 Mar 2023 13:37:32 +0000 (13:37 +0000)
commitca96e367f057c068fb9f016dd7beba55d5d29d81
tree9f42457af58a5da614fbbe14a132c51f6f37f43e
parent4460691252d5c345f0b34ac366639df23c687832
libctf: fix assertion failure with no system qsort_r

If no suitable qsort_r is found in libc, we fall back to an
implementation in ctf-qsort.c.  But this implementation routinely calls
the comparison function with two identical arguments. The comparison
function that ensures that the order of output types is stable is not
ready for this, misinterprets it as a type appearing more that once (a
can-never-happen condition) and fails with an assertion failure.

Fixed, audited for further instances of the same failure (none found)
and added a no-qsort test to my regular testsuite run.

libctf/:
PR libctf/30013
* ctf-dedup.c (sort_output_mapping): Inputs are always equal to
themselves.
libctf/ctf-dedup.c