From: "alanwu (Alan Wu)" Date: 2022-04-15T15:52:13+00:00 Subject: [ruby-core:108267] [Ruby master Misc#18726] CI Error on c99 and c2x Issue #18726 has been updated by alanwu (Alan Wu). Older autoconf versions and `rb_define_method()` both cause warnings. Having different flags during configure and compilation feels dangerous to me since it makes the info from the checks potentially untrustworthy. It feels reasonable to not try to support all of these blanket warnings-are-errors builds because there is simply too many possible build configurations to try. It makes sense to look at them on CI to help improve code quality, though. We can probably devise some fix for `rb_define_method()` by casting between function pointer types, which is guaranteed to round-trip properly. I believe internally we already [cast] before calling through the pointers. Fixing things for C2X might be more challenging. It looks like WG14 is changing `int foo();` to [mean] `int foo(void);`, and there doesn't seem to be a replacement for the old functionality. The new warnings in Clang are intended to help with the transition I believe. I feel that C2X with pre-release versions of Clang is too much of a moving target. Maybe it's best to wait a few months for things to mature. More warnings and errors are under development and a more up-to-date standard draft should help with understanding Clang. [cast]: https://github.com/ruby/ruby/blob/798e21637f28d308bf0d52081fedd1a49cd1f851/vm_insnhelper.c#L2834 [mean]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm ---------------------------------------- Misc #18726: CI Error on c99 and c2x https://bugs.ruby-lang.org/issues/18726#change-97289 * Author: znz (Kazuhiro NISHIYAMA) * Status: Open * Priority: Normal * Assignee: shyouhei (Shyouhei Urabe) ---------------------------------------- https://github.com/ruby/ruby/runs/6013849896?check_suite_focus=true ``` checking char bit... 8 checking size of int... 0 checking size of short... 0 checking size of long... 0 configure: error: in `/__w/ruby/ruby/build': configure: error: cannot compute sizeof (long long) See `config.log' for more details checking size of long long... Error: Process completed with exit code 77. ``` I investigate it, the cause is that autoconf is old in `ghcr.io/ruby/ruby-ci-image:clang-15`. (Autoconf 2.69) Autoconf 2.71 generates with `void`. How to reproduce: ``` % docker run --rm -it ghcr.io/ruby/ruby-ci-image:clang-15 $ sudo apt update $ sudo apt install git $ git clone --depth=1 https://github.com/ruby/ruby $HOME/src $ mkdir $HOME/build $ cd $HOME/build $ ../src/autogen.sh $ ../src/configure -C --enable-debug-env --disable-install-doc --with-ext=-test-/cxxanyargs,+ --without-valgrind --without-jemalloc --without-gmp --with-gcc="clang-15 -std=c99 -Werror=pedantic -pedantic-errors" --enable-shared optflags=-O1 debugflags=-ggdb3 ``` Tail of configure output: ``` checking char bit... 8 checking size of int... 0 checking size of short... 0 checking size of long... 0 checking size of long long... configure: error: in `/home/ci/build': configure: error: cannot compute sizeof (long long) See `config.log' for more details ``` Quote from config.log: ``` configure:13939: checking size of int configure:13944: clang-15 -std=c99 -Werror=pedantic -pedantic-errors -o conftest -O1 -fno-fast-math -ggdb3 -fdeclspec -fstack-protector-strong conftest.c -lm >&5 conftest.c:107:25: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] static long int longval () { return (long int) (sizeof (int)); } ^ void conftest.c:108:35: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] static unsigned long int ulongval () { return (long int) (sizeof (int)); } ^ void 2 errors generated. ``` -- https://bugs.ruby-lang.org/ Unsubscribe: