Skip to content

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

Open
@barracuda156

Description

@barracuda156

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions