Bug #20451


Bad Ruby 3.1.5 backport causes fiddle to fail to build

Added by Bo98 (Bo Anderson) about 1 month ago. Updated 7 days ago.

Target version:
ruby -v:


Ruby 3.1.5 shipped with the following backport:

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 ( 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

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 so I cannot vouch whether or not the two commits are sufficient to fix the originally reported issue.


Dockerfile.ol8 (747 Bytes) Dockerfile.ol8 ylecuyer (Yoann Lecuyer), 05/01/2024 10:04 PM

Updated by ylecuyer (Yoann Lecuyer) about 1 month ago

Additional information:

From fiddle extconf:

when $mswin, $mingw, (libffi_version && (libffi_version <=> [3, 2]) >= 0)
  $defs << "-DUSE_FFI_CLOSURE_ALLOC=1"
when (libffi_version && (libffi_version <=> [3, 2]) < 0)
  have_func('ffi_closure_alloc', ffi_header)

and closure.c

    result = ffi_prep_closure_loc(pcl, cif, callback,
		(void *)self, cl->code);
    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) {

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)

Updated by ylecuyer (Yoann Lecuyer) 28 days ago

I went ahead and created to revert the faulty backport

@unak who you mind review it and release the patch version if accepted?

I checked the repro within fedora 36 and everything is ok.

If people are still having an issue as described in they can bump to ruby 3.2 or 3.3 where it should be fixed

Updated by nobu (Nobuyoshi Nakada) 28 days ago ยท Edited

  • Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN to 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: DONTNEED, 3.3: DONTNEED

It seems a4ad6bd9aac564e93219284c912b26a72f9e82fc is missing.

Updated by ylecuyer (Yoann Lecuyer) 28 days ago

I tested both PR with ol8/ol9 using the attached dockerfile and they both work OK

I'll close my PR in favor of yours as it is more complete regarding the backport.

Actions #5

Updated by hsbt (Hiroshi SHIBATA) 7 days ago

  • Status changed from Open to Closed
  • Backport changed from 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: DONTNEED, 3.3: DONTNEED to 3.1: DONE, 3.2: DONTNEED, 3.3: DONTNEED

Also available in: Atom PDF