php / php-src

The PHP Interpreter
https://www.php.net
Other
38.3k stars 7.76k forks source link

Build failure: `cast.c: error: initialization of 'fpos_t (*)(void *, fpos_t, int)' {aka 'long long int (*)(void *, long long int, int)'} from incompatible pointer type` #15701

Open barracuda156 opened 2 months ago

barracuda156 commented 2 months ago

Description

Attempt to build PHP with gcc-14 fails due to incompatible pointer types error.

Resulted in this output:

/bin/sh /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/libtool --silent --preserve-dup-deps --tag=CC --mode=compile ccache /opt/local/bin/gcc-mp-14 -Imain/streams/ -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/ -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3 -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/ext/date/lib -I/opt/local/include/libxml2 -I/opt/local/include -I/opt/local/include/editline -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/TSRM -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/Zend  -I/opt/local/include -D_GNU_SOURCE  -fno-common -Wstrict-prototypes -Wformat-truncation -Wlogical-op -Wduplicated-cond -Wno-clobbered -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -pipe -Os -arch ppc -ffp-contract=off -fvisibility=hidden -Wimplicit-fallthrough=1 -DZEND_SIGNALS   -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -c /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/memory.c -o main/streams/memory.lo  -MMD -MF main/streams/memory.dep -MT main/streams/memory.lo
/bin/sh /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/libtool --silent --preserve-dup-deps --tag=CC --mode=compile ccache /opt/local/bin/gcc-mp-14 -Imain/streams/ -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/ -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3 -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/ext/date/lib -I/opt/local/include/libxml2 -I/opt/local/include -I/opt/local/include/editline -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/TSRM -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/Zend  -I/opt/local/include -D_GNU_SOURCE  -fno-common -Wstrict-prototypes -Wformat-truncation -Wlogical-op -Wduplicated-cond -Wno-clobbered -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -pipe -Os -arch ppc -ffp-contract=off -fvisibility=hidden -Wimplicit-fallthrough=1 -DZEND_SIGNALS   -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -c /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/mmap.c -o main/streams/mmap.lo  -MMD -MF main/streams/mmap.dep -MT main/streams/mmap.lo
/bin/sh /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/libtool --silent --preserve-dup-deps --tag=CC --mode=compile ccache /opt/local/bin/gcc-mp-14 -Imain/streams/ -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/ -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3 -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/ext/date/lib -I/opt/local/include/libxml2 -I/opt/local/include -I/opt/local/include/editline -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/TSRM -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/Zend  -I/opt/local/include -D_GNU_SOURCE  -fno-common -Wstrict-prototypes -Wformat-truncation -Wlogical-op -Wduplicated-cond -Wno-clobbered -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -pipe -Os -arch ppc -ffp-contract=off -fvisibility=hidden -Wimplicit-fallthrough=1 -DZEND_SIGNALS   -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -c /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/plain_wrapper.c -o main/streams/plain_wrapper.lo  -MMD -MF main/streams/plain_wrapper.dep -MT main/streams/plain_wrapper.lo
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/cast.c:142:9: error: initialization of 'fpos_t (*)(void *, fpos_t,  int)' {aka 'long long int (*)(void *, long long int,  int)'} from incompatible pointer type 'fpos_t (*)(void *, zend_off_t,  int)' {aka 'long long int (*)(void *, int,  int)'} [-Wincompatible-pointer-types]
  142 |         stream_cookie_seeker, stream_cookie_closer
      |         ^~~~~~~~~~~~~~~~~~~~
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3/main/streams/cast.c:142:9: note: (near initialization for 'stream_cookie_functions.seeker')
make: *** [main/streams/cast.lo] Error 1
make: *** Waiting for unfinished jobs....
make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3'
Command failed:  cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php84/work/php-8.4.0beta3" && /usr/bin/make -j6 -w all 
Exit code: 2

But I expected this output instead:

Build with the current GCC version should succeed.

@ryandesign FYI

PHP Version

PHP 8.4.0beta3

Operating System

macOS 10.6

cmb69 commented 2 months ago

Is this perhaps related to

https://github.com/php/php-src/blob/5ca4d8828d1b978ea03b8e00698d887a4d1809b0/main/streams/cast.c#L30-L38

cmb69 commented 2 weeks ago

'fpos_t (*)(void *, zend_off_t, int)' {aka 'long long int (*)(void *, int, int)'}

Why is zend_off_t int on this system? It should be int64_t (aka. long int).

gcc-14 PHP 8.4.0beta3 macOS 10.6

Oh. Really? Putting lipstick on the pig?

In my opinion, WONTFIX.

barracuda156 commented 1 week ago

'fpos_t (*)(void *, zend_off_t, int)' {aka 'long long int (*)(void *, int, int)'}

Why is zend_off_t int on this system? It should be int64_t (aka. long int).

The standard does not require long int to be 64 bit and in practice it may not be. There is a proper type which is guaranteed to be 64-bit, perhaps rather use that?

gcc-14 PHP 8.4.0beta3 macOS 10.6

Oh. Really? Putting lipstick on the pig?

I get your point, but at the same time if the code uses incorrect types, it is a bug, even if it shows up only on a non-standard and seldom used set-up.