metapp icon indicating copy to clipboard operation
metapp copied to clipboard

Unable to build with OCaml 4.14, receive SIGBUS

Open zbaylin opened this issue 1 year ago • 3 comments

When trying to build metapp (both master and 0.4.4), I'm receiving a SIGBUS during (what I presume is) the metapp.ppx step of the process.

This is on macOS 14.2.1 and XCode 15.1.

Steps to reproduce

  • clone the repo
  • run opam install ocaml-base-compiler.4.14.1
  • run opam install . --deps-only
  • run dune build --versbose

When doing the above, I get the following output:

File "metapp/dune", line 3, characters 14-46:
3 |   (preprocess (pps ppxlib.metaquot metapp.ppx))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Command [1] got signal BUS:
$ (cd _build/default && .ppx/f04423e293bc7238bf6fa2027578cb58/ppx.exe --cookie 'library-name="metapp"' -o metapp/metapp.pp.ml --impl metapp/metapp.ml -corrected-suffix .ppx-corrected -diff-cmd - -dump-ast)

zbaylin avatar Jan 08 '24 16:01 zbaylin

Interestingly, this seems like it might be a bug in ppxlib. The backtrace looks like:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=257, address=0x7a2f73726573552f)
  * frame #0: 0x000073726573552f
    frame #1: 0x0000000100f4bbd4 metapp_version_info.cmxs`caml_apply11 + 124
    frame #2: 0x0000000100111288 ppx.exe`camlPpxlib_ast__Ast_helper_lite__code_begin + 144
    frame #3: 0x000000010050af74 ppx.exe`caml_callback [inlined] caml_callback_exn(closure=<unavailable>, arg=<unavailable>) at callback.c:111:10 [opt]
    frame #4: 0x000000010050af5c ppx.exe`caml_callback(closure=<unavailable>, arg=0) at callback.c:165:34 [opt]
    frame #5: 0x000000010050fd98 ppx.exe`caml_natdynlink_run(handle_v=<unavailable>, symbol=<unavailable>) at dynlink_nat.c:128:36 [opt]
    frame #6: 0x00000001005154e8 ppx.exe`caml_call_gc + 352

zbaylin avatar Jan 08 '24 19:01 zbaylin

Okay not as sure about that anymore, it might have just been a faulty llvm trace -- caml_call_gc + 352 doesn't seem to point anywhere useful. The natdynlink stuff though does seem relevant, since I noticed https://github.com/thierry-martinez/metapp/blob/master/ppx/findlib_for_ppx.ml has a decent amount of Dynlink stuff in it. I wonder if something in there is the culprit? I'll do some more research.

zbaylin avatar Jan 08 '24 20:01 zbaylin

I had the same error with OCaml 4.14.0 + 4.14.1 on macOS arm64 using the following compilers:

  • dkml-base-compiler.4.14.0
  • ocaml-base-compiler.4.14.0
  • ocaml-base-compiler.4.14.1

I upgraded to ocaml-base-compiler.4.14.2 and the SIGBUS went away.

In an odd coincidence, I ran into an error at the same location very recently in https://github.com/ocaml-ppx/ppxlib/issues/466 (section "Initial Attempt. OUTDATED and FIXED"). It was almost the same except then I did not receive a SIGBUS, but I was using bytecode so that wasn't surprising. And that older problem had an easy root cause.

jonahbeckford avatar Mar 16 '24 12:03 jonahbeckford