From: "Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date: 2024-07-22T16:33:23+00:00
Subject: [ruby-core:118665] [Ruby master Bug#20614] Integer#size returns incorrect values on 64-bit Windows

Issue #20614 has been updated by Eregon (Benoit Daloze).


alanwu (Alan Wu) wrote in #note-8:
> We can fix the weirdness of having unused bytes in fixnums on LP32 platforms like Windows by defining fixnums based on VALUE. That's good for everyone and probably a better time to change what `0.size` returns.

Right, that makes perfect sense to me.

I'm happy to already merge your changes to ruby/spec to future-proof it, i.e. https://github.com/ruby/ruby/pull/11130 without the Integer#size change.
Could you open an issue or PR for concurrent-ruby?

----------------------------------------
Bug #20614: Integer#size returns incorrect values on 64-bit Windows
https://bugs.ruby-lang.org/issues/20614#change-109191

* Author: surusek (��ukasz Sur)
* Status: Rejected
* ruby -v: ruby 3.4.0dev (2024-07-08T11:00:01Z master 02c4f0c89d [x64-mswin64_140]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
According to the ruby/spec, `0.size` should return size of the machine word in bytes, but on x64-mswin64_140 (both release 3.3.3 and git revision 02c4f0c89d) it doesn't. Following example:

``` ruby
a, b = 0.size, [0].pack('J').length
puts a, b
```

should print two `8`s, but on x64-mswin64_140, a is `4`.
Issue is most likely caused by use of `long` instead of `SIGNED_VALUE` in internal/fixnum.h and `fix_size` function in numeric.c, because on Windows, `long` is always a 32-bit number.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/