On 07/15/2017 02:47 PM, Alexander Monakov wrote: > This is the updated qsort comparator verifier. > > Since we have vec::qsort(cmp), the patch uses the macro argument counting > trick to redirect only the four-argument invocations of qsort to qsort_chk. > I realize that won't win much sympathies, but a patch doing mass-renaming > of qsort in the whole GCC codebase would win even fewer, I suspect. > > The macro ENABLE_FULL_QSORT_CHECKING could be used to enable full O(n^2) > checking, but there's no accompanying configure.ac change. I'm not sure > that would be useful in practice, so I'd rather turn it into #if 0. > > The suppression in genmodes was needed because it's not linked with vec.o. > > * genmodes.c (calc_wider_mode): Suppress qsort macro. > * system.h [CHECKING_P] (qsort): Redirect to qsort_chk. > (qsort_nochk): New macro. > (qsort_chk): Declare. > (qsort_disable_checking): Declare. > * vec.c (qsort_chk_error): New static function. > (qsort_disable_checking): Define. > (qsort_chk): New function. Well, there's not *that* many qsort calls. My quick grep shows 94 and its a very mechanical change. Then a poison in system.h to ensure raw calls to qsort don't return.
The counting trick is, well, ugly. There's also issues in that some compilers don't properly implement the C99 pre-processor standard properly (MSVC) and what happens when there's no arguments? While not likely an issue here, I think it highlights that this kind of preprocessor hackery is just a bad idea. I'd prefer to just bite the bullet and do the mechanical qsort change. Jeff