Skip to content

Commit 6421e31

Browse files
authored
Cast via VALUE function pointer between object pointer (#150)
With gcc 13 and -pedantic: ``` ../../../src/ext/fiddle/function.c: In function ‘function_call’: ../../../src/ext/fiddle/function.c:374:15: error: ISO C forbids conversion of object pointer to function pointer type [-Wpedantic] 374 | args.fn = (void(*)(void))NUM2PTR(cfunc); | ^ ../../../src/ext/fiddle/pointer.c: In function ‘rb_fiddle_ptr_inspect’: ../../../src/ext/fiddle/pointer.c:573:84: error: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic] 573 | RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)data->free); | ^ ```
1 parent d76c87b commit 6421e31

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

ext/fiddle/function.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ function_call(int argc, VALUE argv[], VALUE self)
371371
args.values[i_call] = (void *)&generic_args[i_call];
372372
}
373373
args.values[i_call] = NULL;
374-
args.fn = (void(*)(void))NUM2PTR(cfunc);
374+
args.fn = (void(*)(void))(VALUE)NUM2PTR(cfunc);
375375

376376
if (RTEST(need_gvl)) {
377377
ffi_call(args.cif, args.fn, &(args.retval), args.values);

ext/fiddle/pointer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ rb_fiddle_ptr_inspect(VALUE self)
570570

571571
TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data);
572572
return rb_sprintf("#<%"PRIsVALUE":%p ptr=%p size=%ld free=%p>",
573-
RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)data->free);
573+
RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)(VALUE)data->free);
574574
}
575575

576576
/*

0 commit comments

Comments
 (0)