Issue #20447 has been updated by jaruga (Jun Aruga).
I tried several ways to reproduce this issue on Fedora rawhide i686 environment.
## Containers
First, I don't find the Fedora rawhide i686 container. I couldn't find the i686
container image on the following Fedora's container registries.
*
https://registry.fedoraproject.org/repo/fedora/tags/
*
https://quay.io/repository/fedora/fedora?tab=tags
*
https://hub.docker.com/_/fedora/tags
The following command showing the CPU architecture meta data doesn't include i686
container.
```
$ skopeo inspect --raw
docker://registry.fedoraproject.org/fedora:rawhide | jq
```
## Mock
I tried the mock, Fedora's building software.
https://rpm-software-management.github.io/mock/Release-Notes-3.5
The following command to emulate the i686 environment on QEMU didn't work.
```
$ mock -r fedora-rawhide-i386 --forcearch=i386 *.rpm
```
## setarch
I tried `setarch i686` on Fedora rawhide x86_64 environment.
```
$ cat /etc/fedora-release
Fedora release 41 (Rawhide)
$ rpm -q gcc
gcc-14.0.1-0.15.fc41.x86_64
$ gcc --version
gcc (GCC) 14.0.1 20240411 (Red Hat 14.0.1-0)
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
I tried the following commands. But I got the errors. I am not sure why the errors
happened.
```
$ git checkout v3_3_1
$ setarch i686 ./autogen.sh
$ setarch i686 ./configure warnflags="-Wall -Wincompatible-pointer-types"
...
* arch: i686-linux
...
* with coroutine: x86
...
* warnflags: -Wall -Wincompatible-pointer-types
$ setarch i686 make 2>&1 | tee make.log
...
coroutine/x86/Context.S: Assembler messages:
coroutine/x86/Context.S:17: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:18: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:19: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:20: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:29: Error: invalid instruction suffix for `pop'
coroutine/x86/Context.S:30: Error: invalid instruction suffix for `pop'
coroutine/x86/Context.S:31: Error: invalid instruction suffix for `pop'
coroutine/x86/Context.S:32: Error: invalid instruction suffix for `pop'
make: *** [Makefile:452: coroutine/x86/Context.o] Error 1
```
----------------------------------------
Bug #20447: Ruby 3.3.1 broken on i686 due to "incompatible pointer type" error
https://bugs.ruby-lang.org/issues/20447#change-108114
* Author: vo.x (Vit Ondruch)
* Status: Open
* ruby -v: ruby 3.3.1 (2024-04-23 revision c56cd86388) [i686-linux]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
~~~
gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall
-Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3
-Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=i686
-mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables
-fstack-clash-protection -fPIC -m32 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
-fstack-protector-strong -fno-strict-overflow -fvisibility=hidden
-fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/i386-linux
-I/builddir/build/BUILD/ruby-3.3.1/include -I/builddir/build/BUILD/ruby-3.3.1
-I/builddir/build/BUILD/ruby-3.3.1/prism
-I/builddir/build/BUILD/ruby-3.3.1/enc/unicode/15.0.0 -o time.o -c
/builddir/build/BUILD/ruby-3.3.1/time.c
make: Leaving directory '/builddir/build/BUILD/ruby-3.3.1/redhat-linux-build'
/builddir/build/BUILD/ruby-3.3.1/time.c: In function ‘zone_timelocal’:
/builddir/build/BUILD/ruby-3.3.1/time.c:2345:35: error: passing argument 3 of
‘split_second’ from incompatible pointer type [-Wincompatible-pointer-types]
2345 | split_second(tobj->timew, &t, &s);
| ^~
| |
| wideval_t * {aka long long unsigned int *}
/builddir/build/BUILD/ruby-3.3.1/time.c:616:58: note: expected ‘VALUE *’ {aka ‘long
unsigned int *’} but argument is of type ‘wideval_t *’ {aka ‘long long unsigned int *’}
616 | split_second(wideval_t timew, wideval_t *timew_p, VALUE *subsecx_p)
| ~~~~~~~^~~~~~~~~
make: *** [Makefile:447: time.o] Error 1
make: *** Waiting for unfinished jobs....
make: Entering directory '/builddir/build/BUILD/ruby-3.3.1/redhat-linux-build'
~~~
This is presumably due to #20327 /
https://github.com/ruby/ruby/pull/10332. There seems to
be medicine in master commit:git|055613fd868a8c94e43893f8c58a00cdd2a81f6d or maybe the
whole
https://github.com/ruby/ruby/pull/10332, not sure
--
https://bugs.ruby-lang.org/