@@ -63,8 +63,10 @@ fn qsort[T](lteq[T] compare_func, vec[mutable T] arr, uint left, uint right) {
63
63
if ( right > left) {
64
64
auto pivot = ( left + right) / 2 u;
65
65
auto new_pivot = part[ T ] ( compare_func, arr, left, right, pivot) ;
66
- if ( new_pivot == 0 u) { ret; }
67
- qsort[ T ] ( compare_func, arr, left, new_pivot - 1 u) ;
66
+ if ( new_pivot != 0 u) {
67
+ // Need to do this check before recursing due to overflow
68
+ qsort[ T ] ( compare_func, arr, left, new_pivot - 1 u) ;
69
+ }
68
70
qsort[ T ] ( compare_func, arr, new_pivot + 1 u, right) ;
69
71
}
70
72
}
@@ -194,8 +196,10 @@ mod ivector {
194
196
if ( right > left) {
195
197
auto pivot = ( left + right) / 2 u;
196
198
auto new_pivot = part[ T ] ( compare_func, arr, left, right, pivot) ;
197
- if ( new_pivot == 0 u) { ret; }
198
- qsort[ T ] ( compare_func, arr, left, new_pivot - 1 u) ;
199
+ if ( new_pivot != 0 u) {
200
+ // Need to do this check before recursing due to overflow
201
+ qsort[ T ] ( compare_func, arr, left, new_pivot - 1 u) ;
202
+ }
199
203
qsort[ T ] ( compare_func, arr, new_pivot + 1 u, right) ;
200
204
}
201
205
}
0 commit comments