On 23 October 2014 11:48, Trevor Smith <[email protected]> wrote: > I tried this out this morning. However I am seeing strange behavior with the > memory addresses. In native code, whenever I pass a pointer through the > accessor I receive a different address than the original address -- however, > in valgrind the addresses are the same. > > Relevant code: > git clone [email protected]:trevorsummerssmith/ocaml-libuv.git && cd > ocaml-libuv && git checkout origin/test-lifecycle && make tests > > I see, eg: > > loop: 0x109d76800 > Handle: 0x9d76800 > Handle: 0x9d76800 > F. > ============================================================================== > Failure: handle suite:0:accessors > > The loop address always starts with '10'. However in valgrind the addresses > are the same. > > The c accessors are in lib_gen/lib_accessors.c, the test is in > test/test_handle.ml
The code generated by ctypes doesn't have declarations for your accessor functions in scope, so the C compiler helpfully assumes that the functions return (32-bit) ints rather than (64-bit) pointers, leading to garbage in the upper bits. You should be able to fix the problem by outputting suitable declarations (perhaps by including a header) in libuv_bindgen.ml. _______________________________________________ Ctypes mailing list [email protected] http://lists.ocaml.org/listinfo/ctypes
