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