Bug 2336278 - alsa-tools fails to build with C23 ("new_process.c:67:18: error: assignment to 'void (*)(void)' from incompatible pointer type '__sighandler_t' {aka 'void (*)(int)'} [-Wincompatible-pointer-types]")
Summary: alsa-tools fails to build with C23 ("new_process.c:67:18: error: assignment t...
Keywords:
Status: NEW
Alias: None
Product: Fedora
Classification: Fedora
Component: alsa-tools
Version: 42
Hardware: Unspecified
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Tim Jackson
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: gcc-15-mass-prebuild
TreeView+ depends on / blocked
 
Reported: 2025-01-07 23:56 UTC by Dave Malcolm
Modified: 2025-02-26 13:21 UTC (History)
2 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Dave Malcolm 2025-01-07 23:56:09 UTC
I'm experimentally rebuilding rawhide with the not-yet-released GCC 15 to see if anything breaks, and to help write the porting guide.  See https://fedoraproject.org/wiki/User:Dmalcolm/gcc-15

My test build with GCC 15 failed:
https://copr.fedorainfracloud.org/coprs/dmalcolm/gcc-15-smoketest-3.failed/build/8476073/

whereas my test build with GCC 14 succeeded:
https://copr.fedorainfracloud.org/coprs/dmalcolm/gcc-15-smoketest-3.failed.checker/build/8477652/

Looking at the failure logs e.g.
https://download.copr.fedorainfracloud.org/results/dmalcolm/gcc-15-smoketest-3.failed/fedora-rawhide-x86_64/08476073-alsa-tools/builder-live.log.gz

I see:

In file included from profiles.c:32:
new_process.c: In function 'new_process':
new_process.c:67:18: error: assignment to 'void (*)(void)' from incompatible pointer type '__sighandler_t' {aka 'void (*)(int)'} [-Wincompatible-pointer-types]
   67 |         int_stat = signal(SIGINT, SIG_IGN);
      |                  ^
new_process.c:68:19: error: assignment to 'void (*)(void)' from incompatible pointer type '__sighandler_t' {aka 'void (*)(int)'} [-Wincompatible-pointer-types]
   68 |         quit_stat = signal(SIGQUIT, SIG_IGN);
      |                   ^
new_process.c:69:19: error: assignment to 'void (*)(void)' from incompatible pointer type '__sighandler_t' {aka 'void (*)(int)'} [-Wincompatible-pointer-types]
   69 |         usr2_stat = signal(SIGUSR2, SIG_IGN);
      |                   ^
new_process.c:81:24: error: passing argument 2 of 'signal' from incompatible pointer type [-Wincompatible-pointer-types]
   81 |         signal(SIGINT, int_stat);
      |                        ^~~~~~~~
      |                        |
      |                        void (*)(void)
In file included from envy24control.h:4:
/usr/include/signal.h:88:57: note: expected '__sighandler_t' {aka 'void (*)(int)'} but argument is of type 'void (*)(void)'
   88 | extern __sighandler_t signal (int __sig, __sighandler_t __handler)
      |                                          ~~~~~~~~~~~~~~~^~~~~~~~~
new_process.c:82:25: error: passing argument 2 of 'signal' from incompatible pointer type [-Wincompatible-pointer-types]
   82 |         signal(SIGQUIT, quit_stat);
      |                         ^~~~~~~~~
      |                         |
      |                         void (*)(void)
/usr/include/signal.h:88:57: note: expected '__sighandler_t' {aka 'void (*)(int)'} but argument is of type 'void (*)(void)'
   88 | extern __sighandler_t signal (int __sig, __sighandler_t __handler)
      |                                          ~~~~~~~~~~~~~~~^~~~~~~~~
new_process.c:83:25: error: passing argument 2 of 'signal' from incompatible pointer type [-Wincompatible-pointer-types]
   83 |         signal(SIGUSR2, usr2_stat);
      |                         ^~~~~~~~~
      |                         |
      |                         void (*)(void)
/usr/include/signal.h:88:57: note: expected '__sighandler_t' {aka 'void (*)(int)'} but argument is of type 'void (*)(void)'
   88 | extern __sighandler_t signal (int __sig, __sighandler_t __handler)
      |                                          ~~~~~~~~~~~~~~~^~~~~~~~~


This is probably due to GCC 15 now defaulting to -std=gnu23, whereas GCC 14 defaulted to -std=gnu17, and C23 is stricter about function prototypes than C17.  It's probably fixable by fixing the function prototypes (or by manually adding -std=gnu17 to the C build flags)



Reproducible: Always

Comment 1 Aoife Moloney 2025-02-26 13:21:40 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 42 development cycle.
Changing version to 42.


Note You need to log in before you can comment on or make changes to this bug.