Compiling bson on OSX produces a number of precision loss warnings (-Wshorten-64-to-32)
rake compile [bson] Warning: No private key present, creating unsigned gem. mkdir -p tmp/x86_64-darwin21/bson_native/3.1.2 cd tmp/x86_64-darwin21/bson_native/3.1.2 /Users/alex/.rvm/rubies/ruby-3.1.2/bin/ruby -I. -r.rake-compiler-siteconf.rb ../../../../ext/bson/extconf.rb [bson] Warning: No private key present, creating unsigned gem. creating Makefile cd - cd tmp/x86_64-darwin21/bson_native/3.1.2 /usr/bin/make compiling ../../../../ext/bson/bytebuf.c ../../../../ext/bson/bytebuf.c:90:19: warning: implicit conversion loses integer precision: 'unsigned long' to 'unsigned int' [-Wshorten-64-to-32] return UINT2NUM(READ_SIZE(b)); ~~~~~~~~ ^~~~~~~~~~~~ ../../../../ext/bson/bson-native.h:59:36: note: expanded from macro 'READ_SIZE' (byte_buffer_ptr->write_position - byte_buffer_ptr->read_position) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../../../ext/bson/bytebuf.c:98:21: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] return INT2NUM(b->read_position); ~~~~~~~ ~~~^~~~~~~~~~~~~ ../../../../ext/bson/bytebuf.c:116:21: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] return INT2NUM(b->write_position); ~~~~~~~ ~~~^~~~~~~~~~~~~~ 3 warnings generated. compiling ../../../../ext/bson/endian.c compiling ../../../../ext/bson/init.c compiling ../../../../ext/bson/libbson-utf8.c compiling ../../../../ext/bson/read.c ../../../../ext/bson/read.c:33:49: warning: function 'pvt_raise_decode_error' could be declared with attribute 'noreturn' [-Wmissing-noreturn] void pvt_raise_decode_error(volatile VALUE msg) { ^ ../../../../ext/bson/read.c:136:27: warning: implicit conversion loses integer precision: 'long' to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32] const uint32_t length = FIX2LONG(i); ~~~~~~ ^~~~~~~~~~~ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/arithmetic/long.h:46:22: note: expanded from macro 'FIX2LONG' #define FIX2LONG RB_FIX2LONG /**< @old{RB_FIX2LONG} */ ^ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/arithmetic/long.h:53:22: note: expanded from macro 'RB_FIX2LONG' #define RB_FIX2LONG rb_fix2long /**< @alias{rb_fix2long} */ ^ ../../../../ext/bson/read.c:157:5: warning: variable 'result' is used uninitialized whenever switch default is taken [-Wsometimes-uninitialized] default: ^~~~~~~ ../../../../ext/bson/read.c:161:10: note: uninitialized use occurs here return result; ^~~~~~ ../../../../ext/bson/read.c:146:15: note: initialize the variable 'result' to silence this warning VALUE result; ^ = 0 3 warnings generated. compiling ../../../../ext/bson/util.c compiling ../../../../ext/bson/write.c ../../../../ext/bson/write.c:224:14: warning: implicit conversion loses integer precision: 'long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] length = RSTRING_LEN(utf8_string); ~ ^~~~~~~~~~~~~~~~~~~~~~~~ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/core/rstring.h:52:27: note: expanded from macro 'RSTRING_LEN' #define RSTRING_LEN RSTRING_LEN ^ ../../../../ext/bson/write.c:247:12: warning: implicit conversion loses integer precision: 'long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] length = RSTRING_LEN(utf8_string); ~ ^~~~~~~~~~~~~~~~~~~~~~~~ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/core/rstring.h:52:27: note: expanded from macro 'RSTRING_LEN' #define RSTRING_LEN RSTRING_LEN ^ ../../../../ext/bson/write.c:291:12: warning: implicit conversion loses integer precision: 'long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] length = RSTRING_LEN(string); ~ ^~~~~~~~~~~~~~~~~~~ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/core/rstring.h:52:27: note: expanded from macro 'RSTRING_LEN' #define RSTRING_LEN RSTRING_LEN ^ ../../../../ext/bson/write.c:320:26: warning: implicit conversion loses integer precision: 'long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] const int32_t length = RSTRING_LEN(symbol_str); ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/core/rstring.h:52:27: note: expanded from macro 'RSTRING_LEN' #define RSTRING_LEN RSTRING_LEN ^ ../../../../ext/bson/write.c:333:29: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int32_t' (aka 'int') [-Wshorten-64-to-32] pvt_put_cstring(b, c_str, length, "Key"); ~~~~~~~~~~~~~~~ ^~~~~~ ../../../../ext/bson/write.c:363:35: warning: implicit conversion loses integer precision: 'long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] pvt_replace_int32(b, _position, NUM2LONG(newval)); ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/arithmetic/long.h:51:22: note: expanded from macro 'NUM2LONG' #define NUM2LONG RB_NUM2LONG /**< @old{RB_NUM2LONG} */ ^ /Users/alex/.rvm/rubies/ruby-3.1.2/include/ruby-3.1.0/ruby/internal/arithmetic/long.h:57:22: note: expanded from macro 'RB_NUM2LONG' #define RB_NUM2LONG rb_num2long_inline /**< @alias{rb_num2long_inline} */ ^ ../../../../ext/bson/write.c:363:24: warning: implicit conversion loses integer precision: 'long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] pvt_replace_int32(b, _position, NUM2LONG(newval)); ~~~~~~~~~~~~~~~~~ ^~~~~~~~~ ../../../../ext/bson/write.c:522:29: warning: implicit conversion loses integer precision: 'unsigned long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] new_length = new_position - position; ~ ~~~~~~~~~~~~~^~~~~~~~~~ ../../../../ext/bson/write.c:523:24: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int32_t' (aka 'int') [-Wshorten-64-to-32] pvt_replace_int32(b, position, new_length); ~~~~~~~~~~~~~~~~~ ^~~~~~~~ ../../../../ext/bson/write.c:667:29: warning: implicit conversion loses integer precision: 'unsigned long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32] new_length = new_position - position; ~ ~~~~~~~~~~~~~^~~~~~~~~~ ../../../../ext/bson/write.c:668:24: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int32_t' (aka 'int') [-Wshorten-64-to-32] pvt_replace_int32(b, position, new_length); ~~~~~~~~~~~~~~~~~ ^~~~~~~~ 11 warnings generated. linking shared-object bson_native.bundle cd - mkdir -p tmp/x86_64-darwin21/stage/lib /usr/bin/make install target_prefix= /usr/local/opt/coreutils/bin/ginstall -c -m 0755 bson_native.bundle /Users/alex/Workspace/bson-ruby/lib cp tmp/x86_64-darwin21/bson_native/3.1.2/bson_native.bundle tmp/x86_64-darwin21/stage/lib/bson_native.bundle