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)
Feb 21 2024, 10:40 AM
Unknown Object (File)
Dec 20 2023, 7:36 AM
Unknown Object (File)
Nov 19 2023, 1:21 PM
Unknown Object (File)
Sep 17 2023, 3:57 PM
Unknown Object (File)
Jun 27 2023, 8:26 PM
Unknown Object (File)
May 6 2023, 12:20 AM
Unknown Object (File)
Apr 17 2023, 8:39 AM
Unknown Object (File)
Apr 14 2023, 6:49 PM
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