I tried to build diffutils 3.11 and 3.12 with GCC 14.2, both fail here:

        /opt/local/bin/gcc-mp-14 -std=gnu23  -I.   -I/opt/local/include   
-Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef 
-Wno-unused-function -Wno-unused-parameter -Wno-float-conversion 
-Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion -Wno-type-limits 
-Wno-unused-const-variable -Wno-unsuffixed-float-constants -Wno-error -pipe -Os 
-arch ppc -MT libdiffutils_a-sigsegv.o -MD -MP -MF 
.deps/libdiffutils_a-sigsegv.Tpo -c -o libdiffutils_a-sigsegv.o `test -f 
'sigsegv.c' || echo './'`sigsegv.c
        sigsegv.c: In function 'sigsegv_handler':
        sigsegv.c:1169:11: error: passing argument 2 of 'signal' from 
incompatible pointer type [-Wincompatible-pointer-types]
         1169 |           SIGSEGV_FOR_ALL_SIGNALS (signo, signal (signo, 
SIG_DFL);)
              |           ^~~~~~~~~~~~~~~~~~~~~~~
              |           |
              |           void (*)(void)
        In file included from /usr/include/signal.h:63,
                         from ./signal.h:52,
                         from sigsegv.h:48,
                         from sigsegv.c:23:
        /usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but 
argument is of type 'void (*)(void)'
          419 | void    (*signal(int, void (*)(int)))(int);
              |                       ^~~~~~~~~~~~~
        sigsegv.c:1169:11: error: passing argument 2 of 'signal' from 
incompatible pointer type [-Wincompatible-pointer-types]
         1169 |           SIGSEGV_FOR_ALL_SIGNALS (signo, signal (signo, 
SIG_DFL);)
              |           ^~~~~~~~~~~~~~~~~~~~~~~
              |           |
              |           void (*)(void)
        /usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but 
argument is of type 'void (*)(void)'
          419 | void    (*signal(int, void (*)(int)))(int);
              |                       ^~~~~~~~~~~~~
        sigsegv.c: In function 'sigsegv_deinstall_handler':
        sigsegv.c:1395:7: error: passing argument 2 of 'signal' from 
incompatible pointer type [-Wincompatible-pointer-types]
         1395 |       SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
              |       ^~~~~~~~~~~~~~~~~~~~~~~
              |       |
              |       void (*)(void)
        /usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but 
argument is of type 'void (*)(void)'
          419 | void    (*signal(int, void (*)(int)))(int);
              |                       ^~~~~~~~~~~~~
        sigsegv.c:1395:7: error: passing argument 2 of 'signal' from 
incompatible pointer type [-Wincompatible-pointer-types]
         1395 |       SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
              |       ^~~~~~~~~~~~~~~~~~~~~~~
              |       |
              |       void (*)(void)
        /usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but 
argument is of type 'void (*)(void)'
          419 | void    (*signal(int, void (*)(int)))(int);
              |                       ^~~~~~~~~~~~~
        sigsegv.c: In function 'stackoverflow_deinstall_handler':
        sigsegv.c:1472:7: error: passing argument 2 of 'signal' from 
incompatible pointer type [-Wincompatible-pointer-types]
         1472 |       SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
              |       ^~~~~~~~~~~~~~~~~~~~~~~
              |       |
              |       void (*)(void)
        /usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but 
argument is of type 'void (*)(void)'
          419 | void    (*signal(int, void (*)(int)))(int);
              |                       ^~~~~~~~~~~~~
        sigsegv.c:1472:7: error: passing argument 2 of 'signal' from 
incompatible pointer type [-Wincompatible-pointer-types]
         1472 |       SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
              |       ^~~~~~~~~~~~~~~~~~~~~~~
              |       |
              |       void (*)(void)
        /usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but 
argument is of type 'void (*)(void)'
          419 | void    (*signal(int, void (*)(int)))(int);
              |                       ^~~~~~~~~~~~~
        make[2]: *** [libdiffutils_a-sigsegv.o] Error 1
        make[2]: Leaving directory 
`/opt/local/var/macports/build/_Volumes_BSD-Linux_macports-ports_sysutils_diffutils/diffutils/work/diffutils-3.12/lib'

Adding -Wincompatible-pointer-types to turn errors into warning does change the 
failure. SIG_DFL is #define'd in sgnal.h:

          116   #if defined(_ANSI_SOURCE) || defined(_POSIX_C_SOURCE) || 
defined(__cplusplus)
          117   /*
          118    * Language spec sez we must list exactly one parameter, even 
though we
          119    * actually supply three.  Ugh!
          120    * SIG_HOLD is chosen to avoid KERN_SIG_* values in 
<sys/signalvar.h>
          121    */
          122   #define SIG_DFL         (void (*)(int))0
          123   #define SIG_IGN         (void (*)(int))1
          124   #define SIG_HOLD        (void (*)(int))5
          125   #define SIG_ERR         ((void (*)(int))-1)
          126   #else
          127   /* DO NOT REMOVE THE COMMENTED OUT int: fixincludes needs to 
see them */
          128   #define SIG_DFL         (void (*)(/*int*/))0
          129   #define SIG_IGN         (void (*)(/*int*/))1
          130   #define SIG_HOLD        (void (*)(/*int*/))5
          131   #define SIG_ERR         ((void (*)(/*int*/))-1)
          132   #endif

None of _ANSI_SOURCE, _POSIX_C_SOURCE, or __cplusplus are defined by GCC 14.2 
here. As an amateur I have no idea how to solve this, so I'm going to live with 
the Apple supplied tools.

--
Greetings

  Pete

One cannot live by television, video games, top ten CDs, and dumb movies alone.
– Amiri Baraka, 1999







Reply via email to