[ruby-core:108267] [Ruby master Misc#18726] CI Error on c99 and c2x
From:
"alanwu (Alan Wu)" <noreply@...>
Date:
2022-04-15 15:52:13 UTC
List:
ruby-core #108267
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>