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, Jun 24, 7:17 AM
Unknown Object (File)
Sat, Jun 6, 6:32 AM
Unknown Object (File)
Wed, May 27, 5:34 AM
Unknown Object (File)
May 16 2026, 1:13 PM
Unknown Object (File)
May 15 2026, 10:48 AM
Unknown Object (File)
May 15 2026, 10:48 AM
Unknown Object (File)
May 14 2026, 8:05 AM
Unknown Object (File)
Apr 28 2026, 2:03 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 49169
Build 46058: 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