On Tue, 23 Jul 2019, Alexander Monakov wrote: > On Tue, 23 Jul 2019, Richard Biener wrote: > > > OK, so like below. Slight complication is that C++ doesn't allow > > the void * to int (*)() casting which means we probably have to go > > with the template wrapper. I have to check if we use gcc_qsort > > from C code, the prototypes are currently in system.h. > > This is a bit confusing. I see the patch implements option 1, but > you're saying you'd prefer option 3 (which is also my preference)?
I just wanted to see how it plays out thus I took the simplest which is option 1. But yes, if option 3 works I'm all for it. > Calls from C code should be very rare, it's possible to adjust them > manually if going for option 3. > > > Of course easiest is to simply rewrite all qsort calls to use > > [gcc_]qsort_r and not provide qsort and poison it. I'm leaning > > towards this "solution". > > All ~150 of them? :/ > > On targets with register passing conventions we can also > > completely elide the cmp2to3 wrapper (ok, that's a hack). > > A bad hack indeed. Option 3 allows getting efficient code > in common cases without causing undefined behavior. > > Can you let me handle sort.cc changes once there's agreement > which way to go? Sure - feel free to give option 3 a shot. I'm just worried about the system.h redirect which would be then disabled for C? Thanks, Richard.