As noted in the [porting docs], GCC-15 uses c23 (well, gnu23) by
default. This causes -Wincompatible-pointer-types errors to occur when
building the Ruby SWIG bindings due to the rb_ensure, rb_iterate, and
rb_rescue2 callbacks.

[porting docs]: https://gcc.gnu.org/gcc-15/porting_to.html

This can be worked around by using an older -std.


Full set of build errors:

../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'svn_swig_rb_set_pool':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:791:29: error: 
passing argument 2 of 'rb_hash_foreach' from incompatible pointer type 
[-Wincompatible-pointer-types]
  791 |     rb_hash_foreach(target, (int(*)(ANYARGS))rb_set_pool_for_hash_callback, 
(VALUE)&arg);
      |                             
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                             |
      |                             int (*)(void)
In file included from /usr/include/ruby-3.3.0/ruby/internal/scan_args.h:37,
                 from /usr/include/ruby-3.3.0/ruby/ruby.h:46,
                 from /usr/include/ruby-3.3.0/ruby.h:38,
                 from 
/home/jamessan/src/apache.org/subversion/trunk/BUILD/../subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg:774,
                 from 
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:28:
/usr/include/ruby-3.3.0/ruby/internal/intern/hash.h:83:40: note: expected 'int 
(*)(VALUE,  VALUE,  VALUE)' {aka 'int (*)(long unsigned int,  long unsigned 
int,  long unsigned int)'} but argument is of type 'int (*)(void)'
   83 | void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, 
VALUE arg), VALUE arg);
      |                                  
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:809:14: error: 
passing argument 1 of 'rb_iterate' from incompatible pointer type 
[-Wincompatible-pointer-types]
  809 |   rb_iterate((VALUE(*)())rb_each, target, (VALUE(*)())rb_set_pool, 
pool);
      |              ^~~~~~~~~~~~~~~~~~~
      |              |
      |              VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:283:26: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  283 | VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, 
rb_block_call_func_t proc, VALUE data2);
      |                  ~~~~~~~~^~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:809:43: error: 
passing argument 3 of 'rb_iterate' from incompatible pointer type 
[-Wincompatible-pointer-types]
  809 |   rb_iterate((VALUE(*)())rb_each, target, (VALUE(*)())rb_set_pool, 
pool);
      |                                           ^~~~~~~~~~~~~~~~~~~~~~~
      |                                           |
      |                                           VALUE (*)(void) {aka long 
unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:283:75: note: expected 
'rb_block_call_func_t' {aka 'long unsigned int (*)(long unsigned int,  long 
unsigned int,  int,  const long unsigned int *, long unsigned int)'} but 
argument is of type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  283 | VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, 
rb_block_call_func_t proc, VALUE data2);
      |                                                      
~~~~~~~~~~~~~~~~~~~~~^~~~
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:88:29: note: 
'rb_block_call_func_t' declared here
   88 | typedef rb_block_call_func *rb_block_call_func_t;
      |                             ^~~~~~~~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'svn_swig_rb_to_apr_array_row_prop':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1074:21: error: 
passing argument 2 of 'rb_hash_foreach' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1074 |                     
(int(*)(ANYARGS))svn_swig_rb_to_apr_array_row_prop_callback,
      |                     
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     |
      |                     int (*)(void)
/usr/include/ruby-3.3.0/ruby/internal/intern/hash.h:83:40: note: expected 'int 
(*)(VALUE,  VALUE,  VALUE)' {aka 'int (*)(long unsigned int,  long unsigned 
int,  long unsigned int)'} but argument is of type 'int (*)(void)'
   83 | void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, 
VALUE arg), VALUE arg);
      |                                  
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'svn_swig_rb_to_apr_array_prop':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1130:21: error: 
passing argument 2 of 'rb_hash_foreach' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1130 |                     
(int(*)(ANYARGS))svn_swig_rb_to_apr_array_prop_callback,
      |                     
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     |
      |                     int (*)(void)
/usr/include/ruby-3.3.0/ruby/internal/intern/hash.h:83:40: note: expected 'int 
(*)(VALUE,  VALUE,  VALUE)' {aka 'int (*)(long unsigned int,  long unsigned 
int,  long unsigned int)'} but argument is of type 'int (*)(void)'
   83 | void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, 
VALUE arg), VALUE arg);
      |                                  
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'r2c_hash':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1553:27: error: 
passing argument 2 of 'rb_hash_foreach' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1553 |     rb_hash_foreach(hash, (int(*)(ANYARGS))r2c_hash_i, (VALUE)&data);
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                           |
      |                           int (*)(void)
/usr/include/ruby-3.3.0/ruby/internal/intern/hash.h:83:40: note: expected 'int 
(*)(VALUE,  VALUE,  VALUE)' {aka 'int (*)(long unsigned int,  long unsigned 
int,  long unsigned int)'} but argument is of type 'int (*)(void)'
   83 | void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, 
VALUE arg), VALUE arg);
      |                                  
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'invoke_callback':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1658:20: error: 
passing argument 1 of 'rb_ensure' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1658 |   return rb_ensure((VALUE(*)(ANYARGS))callback, baton,
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                    |
      |                    VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:425:25: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  425 | VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE 
(*e_proc)(VALUE), VALUE data2);
      |                 ~~~~~~~~^~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1659:20: error: 
passing argument 3 of 'rb_ensure' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1659 |                    (VALUE(*)(ANYARGS))callback_ensure, subpool);
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                    |
      |                    VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:425:62: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  425 | VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE 
(*e_proc)(VALUE), VALUE data2);
      |                                                      
~~~~~~~~^~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'callback_handle_error':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1668:21: error: 
passing argument 1 of 'rb_rescue2' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1668 |   return rb_rescue2((VALUE(*)(ANYARGS))callback,
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     |
      |                     VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:388:26: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  388 | VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE 
(*r_proc)(VALUE, VALUE), VALUE data2, ...);
      |                  ~~~~~~~~^~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1670:21: error: 
passing argument 3 of 'rb_rescue2' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1670 |                     (VALUE(*)(ANYARGS))callback_rescue,
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     |
      |                     VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:388:63: note: expected 'VALUE 
(*)(VALUE,  VALUE)' {aka 'long unsigned int (*)(long unsigned int,  long 
unsigned int)'} but argument is of type 'VALUE (*)(void)' {aka 'long unsigned 
int (*)(void)'}
  388 | VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE 
(*r_proc)(VALUE, VALUE), VALUE data2, ...);
      |                                                       
~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function 
'invoke_callback_handle_error':
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1689:20: error: 
passing argument 1 of 'rb_ensure' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1689 |   return rb_ensure((VALUE(*)(ANYARGS))callback_handle_error,
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                    |
      |                    VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:425:25: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  425 | VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE 
(*e_proc)(VALUE), VALUE data2);
      |                 ~~~~~~~~^~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1691:20: error: 
passing argument 3 of 'rb_ensure' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1691 |                    (VALUE(*)(ANYARGS))callback_ensure, pool);
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                    |
      |                    VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:425:62: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  425 | VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE 
(*e_proc)(VALUE), VALUE data2);
      |                                                      
~~~~~~~~^~~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1744:14: error: 
passing argument 1 of 'rb_iterate' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1744 |   rb_iterate((VALUE(*)())rb_each, target,
      |              ^~~~~~~~~~~~~~~~~~~
      |              |
      |              VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:283:26: note: expected 'VALUE 
(*)(VALUE)' {aka 'long unsigned int (*)(long unsigned int)'} but argument is of 
type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  283 | VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, 
rb_block_call_func_t proc, VALUE data2);
      |                  ~~~~~~~~^~~~~~~~~~~~~
../subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:1745:14: error: 
passing argument 3 of 'rb_iterate' from incompatible pointer type 
[-Wincompatible-pointer-types]
 1745 |              (VALUE(*)())add_baton_if_delta_editor, baton);
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |              |
      |              VALUE (*)(void) {aka long unsigned int (*)(void)}
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:283:75: note: expected 
'rb_block_call_func_t' {aka 'long unsigned int (*)(long unsigned int,  long 
unsigned int,  int,  const long unsigned int *, long unsigned int)'} but 
argument is of type 'VALUE (*)(void)' {aka 'long unsigned int (*)(void)'}
  283 | VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, 
rb_block_call_func_t proc, VALUE data2);
      |                                                      
~~~~~~~~~~~~~~~~~~~~~^~~~
/usr/include/ruby-3.3.0/ruby/internal/iterator.h:88:29: note: 
'rb_block_call_func_t' declared here
   88 | typedef rb_block_call_func *rb_block_call_func_t;
      |                             ^~~~~~~~~~~~~~~~~~~~

Cheers,
--
James
GPG Key: 4096R/91BF BF4D 6956 BD5D F7B7  2D23 DFE6 91AE 331B A3DB

Reply via email to