Issue #20451 has been updated by ylecuyer (Yoann Lecuyer).
Additional information:
From fiddle extconf:
``` ruby
case
when $mswin, $mingw, (libffi_version && (libffi_version <=> [3, 2]) >=
0)
$defs << "-DUSE_FFI_CLOSURE_ALLOC=1"
when (libffi_version && (libffi_version <=> [3, 2]) < 0)
else
have_func('ffi_closure_alloc', ffi_header)
end
```
and closure.c
```c
#if USE_FFI_CLOSURE_ALLOC
result = ffi_prep_closure_loc(pcl, cif, callback,
(void *)self, cl->code);
#else
result = ffi_prep_closure(pcl, cif, callback, (void *)(data->self));
cl->code = (void *)pcl;
i = mprotect(pcl, sizeof(*pcl), PROT_READ | PROT_EXEC);
if (i) {
rb_sys_fail("mprotect");
}
#endif
```
With libffi > 3.2 it compiles without any issue (I tried with 3.4.4) and with older
version there is the error described (test with 3.1.0)
----------------------------------------
Bug #20451: Bad Ruby 3.1.5 backport causes fiddle to fail to build
https://bugs.ruby-lang.org/issues/20451#change-108144
* Author: Bo98 (Bo Anderson)
* Status: Open
* ruby -v: 3.1.5p252
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Ruby 3.1.5 shipped with the following backport:
https://github.com/ruby/ruby/commit/84f2aabd272a54e79979795d2d405090704a1d07
However this backport directly breaks the build:
```
closure.c:279:60: error: use of undeclared identifier 'data'
result = ffi_prep_closure(pcl, cif, callback, (void *)(data->self));
^
```
The original commit (
https://github.com/ruby/fiddle/commit/2530496602) was updating the
second branch to match the change in the first branch a couple lines up. However that
change in the other branch does not exist in Ruby 3.1. The commit in question requires a
previous commit of
https://github.com/ruby/fiddle/commit/81a8a56239973ab7559229830a449d201955b….
The backport should either be reverted or an other commit should also be backported. Note
that these commits were in a series of many commits made to fix an upstream issue
https://github.com/ruby/fiddle/issues/102 so I cannot vouch whether or not the two commits
are sufficient to fix the originally reported issue.
--
https://bugs.ruby-lang.org/