concurrent-ruby icon indicating copy to clipboard operation
concurrent-ruby copied to clipboard

atomic_reference.c fails to compile on 32-bit due to unconditional usage of 64-bit atomics

Open barracuda156 opened this issue 1 year ago • 0 comments

This is probably was missed earlier since GCC was more permissive. With gcc-14 it fails (rightfully so):

ccache /opt/local/bin/gcc-mp-14 -I. -I/opt/local/include/ruby-3.3.4/ppc-darwin10.0.0d2 -I/opt/local/include/ruby-3.3.4/ruby/backward -I/opt/local/include/ruby-3.3.4 -I. -DHAVE_LIBKERN_OSATOMIC_H -I/opt/local/include -isystem/opt/local/include/LegacySupport -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT   -fno-common -pipe -I/opt/local/libexec/openssl3/include -Os -Wno-incompatible-pointer-types -fno-common -arch ppc -o atomic_reference.o -c atomic_reference.c
atomic_reference.c: In function 'ir_compare_and_set':
atomic_reference.c:82:7: error: implicit declaration of function 'OSAtomicCompareAndSwap64'; did you mean 'OSAtomicCompareAndSwap32'? [-Wimplicit-function-declaration]
   82 |   if (OSAtomicCompareAndSwap64(expect_value, new_value, &DATA_PTR(self))) {
      |       ^~~~~~~~~~~~~~~~~~~~~~~~
      |       OSAtomicCompareAndSwap32
make: *** [atomic_reference.o] Error 1

make failed, exit code 2

Gem files will remain installed in /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_ruby_rb-concurrent-ruby-ext/rb33-concurrent-ruby-ext/work/destroot/opt/local/lib/ruby3.3/gems/3.3.0/gems/concurrent-ruby-ext-1.3.4 for inspection.
Results logged to /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_ruby_rb-concurrent-ruby-ext/rb33-concurrent-ruby-ext/work/destroot/opt/local/lib/ruby3.3/gems/3.3.0/extensions/ppc-darwin-10/3.3.0/concurrent-ruby-ext-1.3.4/gem_make.out
Command failed:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_ruby_rb-concurrent-ruby-ext/rb33-concurrent-ruby-ext/work/concurrent-ruby-ext-1.3.4" && /opt/local/bin/gem3.3 install --local --force --install-dir /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_ruby_rb-concurrent-ruby-ext/rb33-concurrent-ruby-ext/work/destroot/opt/local/lib/ruby3.3/gems/3.3.0 /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_ruby_rb-concurrent-ruby-ext/rb33-concurrent-ruby-ext/work/concurrent-ruby-ext-1.3.4/concurrent-ruby-ext.gem 
Exit code: 1

Looks like the code assumes 64-bit atomics is available on the level of OS, which needs not be the case. Either 32-bit version is to be used on 32-bit arch, or if 64-bit is needed, then libatomic is there.

barracuda156 avatar Sep 08 '24 14:09 barracuda156