Page MenuHomeFreeBSD

stdlib.h: Fix qsort_r compatibility with GCC 12.
ClosedPublic

Authored by jhb on Nov 16 2022, 5:41 PM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Nov 12, 5:59 PM
Unknown Object (File)
Tue, Oct 28, 7:21 AM
Unknown Object (File)
Mon, Oct 27, 5:03 AM
Unknown Object (File)
Sun, Oct 26, 5:25 PM
Unknown Object (File)
Sun, Oct 26, 4:36 AM
Unknown Object (File)
Sat, Oct 25, 5:40 PM
Unknown Object (File)
Sat, Oct 25, 4:45 PM
Unknown Object (File)
Fri, Oct 24, 1:31 AM
Subscribers

Details

Summary

GCC 12 (unlike GCC 9) does not match a function argument passed to the
old qsort_r() API (as is used in the qsort_r_compat test) to a
function pointer type via __generic. It treats the function type as a
distinct type from a function pointer. As a workaround, add a second
definition of qsort_r for GCC 12 which uses the bare function type.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 48394
Build 45280: arc lint + arc unit

Event Timeline

jhb requested review of this revision.Nov 16 2022, 5:41 PM

This breaks the build with clang as clang says a _Generic selector can only have an object type and a function pointer type isn't valid. GCC 9 was happy with the existing version, so this might be some regression in GCC 10, 11, or 12.

This is a bit of a stop-gap. I probably should create a smaller reproducible test case to submit as a bug upstream to GCC.

include/stdlib.h
355

I haven't tested GCC 10 or 11.

LGTM as it applies only to GCC 12.
Would be great to have a small reproducer shared with upstream.

This revision is now accepted and ready to land.Jan 19 2023, 7:10 PM