Hey,
thanks for the report!
Inlining is somewhat broken. Direct casting of a function into (void*) is undefined behavior in C afaik but that's what we'll do.
Please consult this issue: https://gitlab.com/embeddable-common-lisp/ecl/issues/167
hiro hiro writes:
Hello,
I compiled ecl16.0.0 with option "--with-cxx".
Then I use ffi:defcallback function like
(ffi:defcallback yyyy :void () ..... )
then compile-file (compile-file "xxxxx.lisp" :c-file "xxxxx.cpp" :system-p t)
I received error message as follows (freebsd10.1 clang++) xxxxx.cpp:162:8: error: no matching function for call to 'ecl_make_foreign_data' T0 = ecl_make_foreign_data(ECL_SYM("POINTER-VOID",1381),0,ecl_callback_0)
I try as follows
in src/cmp/cmpcbk.lsp & src/new-cmp/cmpc-cbk.lsp line 44 from: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,~a)" c-name) to: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,(void*)~a)"
c-name)
I've added main part of your mail to the abovementioned issue. I won't incorporate this fix directly because I remember I did similar stuff //casting to (void*)obj, or even casting to (void**)&obj// at my last attempt when working on this issue but it was breaking arm builds. When I'll confirm it doesn't break a builds I'll add it along with other changes and the appropriate patch to CFFI.
after that, I did not receive error message and ffi:callback work fine.
Would you let me know what your thoughts are on this matter.
Generally use CFFI's defcallback. It does just that but without inlining (I've disabled inlining to make things working and left issue opened to work on it when I'll find time/incentive to do it).
hirohiro447
As a sidenote, according to Juan (I've asked him about the newcmp) newcmp was a failed experiment and it doesn't build anyway. src/cmp/* changes were enough. I'll remove the `new-cmp' directory before the next release to avoid unnecessary confusing of people approaching the codebase.
Once again - thanks for the report :-)
Best regards, Daniel