Fix nondeterministic qsorts

This commit is contained in:
jl777
2019-04-11 04:15:41 -11:00
parent 1065ccd67a
commit c45b1766ee
4 changed files with 29 additions and 12 deletions

View File

@@ -301,6 +301,9 @@ static int _el_buf_cmp(const void *ap, const void *bp) {
ret = -1;
else if(a->length > b->length)
ret = 1;
else if ( (uint64_t)a < (uint64_t)b ) // jl777 prevent nondeterminism
ret = -1;
else ret = 1;
}
return ret;

View File

@@ -35,8 +35,15 @@ static uint32_t thresholdSubtypes(const CC *cond) {
}
static int cmpCostDesc(const void *a, const void *b) {
return (int) ( *(unsigned long*)b - *(unsigned long*)a );
static int cmpCostDesc(const void *a, const void *b)
{
int retval;
retval = (int) ( *(unsigned long*)b - *(unsigned long*)a );
if ( retval != 0 )
return(retval);
else if ( (uint64_t)a < (uint64_t)b ) // jl777 prevent nondeterminism
return(-1);
else return(1);
}
@@ -79,7 +86,9 @@ static int cmpConditionBin(const void *a, const void *b) {
if (ret == 0)
return r0.encoded < r1.encoded ? -1 : 1;
return 0;
else if ( (uint64_t)a < (uint64_t)b ) // jl777 prevent nondeterminism
return(-1);
else return(1);
}