Jean Boussier created THRIFT-5475:
-------------------------------------

             Summary: shorten-64-to-32 errors compilation errors on macOS
                 Key: THRIFT-5475
                 URL: https://issues.apache.org/jira/browse/THRIFT-5475
             Project: Thrift
          Issue Type: Bug
          Components: Ruby - Library
            Reporter: Jean Boussier


The ruby gem fail to compile on newer macOS versions, presumably because of a 
new clang warning.

 

I provided a patch for it here: [https://github.com/apache/thrift/pull/2464]

 

On a sidenote, it's not recommended for Ruby native extensions to set `-Wall` 
outside of their own CI environment for this exact reason. Newer compilers get 
stricter, and the gem becomes unusable. 

```

 

{{$ ruby --version
ruby 3.1.0dev (2021-10-06T06:42:37Z master d53493715c) [x86_64-darwin20]
$ gem install thrift
Building native extensions. This could take a while...
ERROR:  Error installing thrift:
        ERROR: Failed to build gem native extension.

    current directory: /Users/byroot/.gem/ruby/3.1.0/gems/thrift-0.15.0/ext
/opt/rubies/3.1.0-dev/bin/ruby -I /opt/rubies/3.1.0-dev/lib/ruby/3.1.0 -r 
./siteconf20211013-11520-x7l42b.rb extconf.rb
checking for strlcpy() in string.h... yes
creating Makefile

current directory: /Users/byroot/.gem/ruby/3.1.0/gems/thrift-0.15.0/ext
make DESTDIR\= clean

current directory: /Users/byroot/.gem/ruby/3.1.0/gems/thrift-0.15.0/ext
make DESTDIR\=
compiling binary_protocol_accelerated.c
binary_protocol_accelerated.c:85:27: error: implicit conversion loses integer 
precision: 'long' to 'int32_t' (aka 'int') [-Werror,-Wshorten-64-to-32]
  write_i32_direct(trans, RSTRING_LEN(str));
  ~~~~~~~~~~~~~~~~        ^~~~~~~~~~~~~~~~
/opt/rubies/3.1.0-dev/include/ruby-3.1.0/ruby/internal/core/rstring.h:50:27: 
note: expanded from macro 'RSTRING_LEN'
#define RSTRING_LEN       RSTRING_LEN
                          ^
binary_protocol_accelerated.c:226:27: error: implicit conversion loses integer 
precision: 'long' to 'int32_t' (aka 'int') [-Werror,-Wshorten-64-to-32]
  write_i32_direct(trans, RSTRING_LEN(buf));
  ~~~~~~~~~~~~~~~~        ^~~~~~~~~~~~~~~~
/opt/rubies/3.1.0-dev/include/ruby-3.1.0/ruby/internal/core/rstring.h:50:27: 
note: expanded from macro 'RSTRING_LEN'
#define RSTRING_LEN       RSTRING_LEN
                          ^
binary_protocol_accelerated.c:406:15: error: implicit conversion loses integer 
precision: 'long long' to 'int' [-Werror,-Wshorten-64-to-32]
  VERSION_1 = rb_num2ll(rb_const_get(thrift_binary_protocol_class, 
rb_intern("VERSION_1")));
            ~ 
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
binary_protocol_accelerated.c:407:18: error: implicit conversion loses integer 
precision: 'long long' to 'int' [-Werror,-Wshorten-64-to-32]
  VERSION_MASK = rb_num2ll(rb_const_get(thrift_binary_protocol_class, 
rb_intern("VERSION_MASK")));
               ~ 
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
binary_protocol_accelerated.c:408:15: error: implicit conversion loses integer 
precision: 'long long' to 'int' [-Werror,-Wshorten-64-to-32]
  TYPE_MASK = rb_num2ll(rb_const_get(thrift_binary_protocol_class, 
rb_intern("TYPE_MASK")));
            ~ 
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 errors generated.
make: *** [binary_protocol_accelerated.o] Error 1}}

{{```}}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to