Issue #18059 has been updated by shyouhei (Shyouhei Urabe).


I guess none of them are open for extension libraries.  For instance `FL_USER0` is `FL_SINGLETON`.  It is obvious that the flag cannot be abused in any other ways than how we currently use it.

The "USER" terminology never seriously meant anything I guess.  Extension libraries are the safest when they leave those bits untouched.

----------------------------------------
Misc #18059: Which FL_USERx are open to extension libraries?
https://bugs.ruby-lang.org/issues/18059#change-93097

* Author: nobu (Nobuyoshi Nakada)
* Status: Open
* Priority: Normal
----------------------------------------
Often the following failure occurs in `test-spec`.

```
RBasic support for regular objects supports copying the flags from one object over to the other FAILED
Expected 81920 == 33636352
to be truthy but was false
/tmp/ruby/v3/src/trunk/spec/ruby/optional/capi/shared/rbasic.rb:71:in `block (2 levels) in <top (required)>'
/tmp/ruby/v3/src/trunk/spec/ruby/optional/capi/rbasic_spec.rb:8:in `<top (required)>'
```

`81920    ==   0x14000`
`33636352 == 0x2014000`
The difference `0x2000000` is `FL_USER13`, which is used as `ROBJECT_TRANSIENT_FLAG`.
This flag is set when any `Object` instance has some amount of instance variables.

In this particular case, it is possible to fix just by excluding the bit.
But, the question is which flags are open to extension libraries.

My guess is these flags are available for `T_DATA` classes, but not for `T_OBJECT`.
Any thoughts?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>