Skip to content

Merlin enters debugger repeatedly (OxCaml) #2045

Description

@bhlieberman

Hi,

I am using Merlin version merlin.5.2.1-502+ox with OxCaml. It was the default version installed when I ran the commands specified in the Getting Started guide for OxCaml. Every few keystrokes the Emacs Lisp debugger starts and prints this backtrace:

Debugger entered--Lisp error: (error "unknown answer: \"exception\":\"Invalid_argument(\\\"force_reduction: this reduction is not permitted in this state\\\")\nRaised at Stdlib.invalid_arg in file \\\"stdlib.ml\\\" (inlined), line 40, characters 20-45\nCalled from Ocaml_preprocess__MenhirLib.Engine.Make.force_reduction in file \\\"src/ocaml/preprocess/menhirLib.ml\\\", line 2015, characters 6-82\nCalled from Merlin_utils__Std.List.rev_scan_left in file \\\"src/utils/std.ml\\\", line 93, characters 17-25\nCalled from Merlin_kernel__Mreader_recover.Make.generate.aux in file \\\"src/kernel/mreader_recover.ml\\\", line 215, characters 10-57\nCalled from Merlin_kernel__Mreader_recover.Make.generate in file \\\"src/kernel/mreader_recover.ml\\\", line 252, characters 28-38\nCalled from Merlin_kernel__Mreader_recover.Make.generate in file \\\"src/kernel/mreader_recover.ml\\\", line 256, characters 45-57\nCalled from Merlin_kernel__Mreader_parser.resume_parse.enter_error in file \\\"src/kernel/mreader_parser.ml\\\", line 117, characters 21-35\nCalled from Merlin_kernel__Mreader_parser.parse in file \\\"src/kernel/mreader_parser.ml\\\", line 160, characters 20-48\nCalled from Merlin_kernel__Mreader_parser.run_parser.(fun) in file \\\"src/kernel/mreader_parser.ml\\\", line 176, characters 6-42\nCalled from Merlin_utils__Misc.try_finally in file \\\"src/utils/misc.ml\\\", line 46, characters 8-15\nRe-raised at Merlin_utils__Misc.try_finally in file \\\"src/utils/misc.ml\\\", line 63, characters 10-24\nCalled from Merlin_kernel__Mreader_parser.make in file \\\"src/kernel/mreader_parser.ml\\\", line 193, characters 20-56\nCalled from Merlin_kernel__Mreader.normal_parse in file \\\"src/kernel/mreader.ml\\\", line 49, characters 15-77\nCalled from Merlin_kernel__Mpipeline.Reader_phase.f in file \\\"src/kernel/mpipeline.ml\\\" (inlined), line 77, characters 4-47\nCalled from Merlin_kernel__Phase_cache.With_cache.apply in file \\\"src/kernel/phase_cache.ml\\\", line 56, characters 19-32\nCalled from Merlin_kernel__Phase_cache.With_cache.apply in file \\\"src/kernel/phase_cache.ml\\\" (inlined), lines 50-85, characters 12-1540\nCalled from Merlin_kernel__Mpipeline.process in file \\\"src/kernel/mpipeline.ml\\\", lines 330-331, characters 11-99\nCalled from CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.timed_lazy in file \\\"src/kernel/mpipeline.ml\\\", line 17, characters 11-23\nRe-raised at Merlin_kernel__Mpipeline.timed_lazy in file \\\"src/kernel/mpipeline.ml\\\", line 23, characters 7-22\nCalled from CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.process in file \\\"src/kernel/mpipeline.ml\\\", lines 350-355, characters 13-225\nCalled from CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.timed_lazy in file \\\"src/kernel/mpipeline.ml\\\", line 17, characters 11-23\nRe-raised at Merlin_kernel__Mpipeline.timed_lazy in file \\\"src/kernel/mpipeline.ml\\\", line 23, characters 7-22\nCalled from CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.process in file \\\"src/kernel/mpipeline.ml\\\", line 378, characters 13-48\nCalled from CamlinternalLazy.do_force_block in file \\\"camlinternalLazy.ml\\\", line 56, characters 17-27\nRe-raised at Caml...")
  error("unknown answer: %S:%S" "exception" "Invalid_argument(\"force_reduction: this reduction is not permitted in this state\")\nRaised at Stdlib.invalid_arg in file \"stdlib.ml\" (inlined), line 40, characters 20-45\nCalled from Ocaml_preprocess__MenhirLib.Engine.Make.force_reduction in file \"src/ocaml/preprocess/menhirLib.ml\", line 2015, characters 6-82\nCalled from Merlin_utils__Std.List.rev_scan_left in file \"src/utils/std.ml\", line 93, characters 17-25\nCalled from Merlin_kernel__Mreader_recover.Make.generate.aux in file \"src/kernel/mreader_recover.ml\", line 215, characters 10-57\nCalled from Merlin_kernel__Mreader_recover.Make.generate in file \"src/kernel/mreader_recover.ml\", line 252, characters 28-38\nCalled from Merlin_kernel__Mreader_recover.Make.generate in file \"src/kernel/mreader_recover.ml\", line 256, characters 45-57\nCalled from Merlin_kernel__Mreader_parser.resume_parse.enter_error in file \"src/kernel/mreader_parser.ml\", line 117, characters 21-35\nCalled from Merlin_kernel__Mreader_parser.parse in file \"src/kernel/mreader_parser.ml\", line 160, characters 20-48\nCalled from Merlin_kernel__Mreader_parser.run_parser.(fun) in file \"src/kernel/mreader_parser.ml\", line 176, characters 6-42\nCalled from Merlin_utils__Misc.try_finally in file \"src/utils/misc.ml\", line 46, characters 8-15\nRe-raised at Merlin_utils__Misc.try_finally in file \"src/utils/misc.ml\", line 63, characters 10-24\nCalled from Merlin_kernel__Mreader_parser.make in file \"src/kernel/mreader_parser.ml\", line 193, characters 20-56\nCalled from Merlin_kernel__Mreader.normal_parse in file \"src/kernel/mreader.ml\", line 49, characters 15-77\nCalled from Merlin_kernel__Mpipeline.Reader_phase.f in file \"src/kernel/mpipeline.ml\" (inlined), line 77, characters 4-47\nCalled from Merlin_kernel__Phase_cache.With_cache.apply in file \"src/kernel/phase_cache.ml\", line 56, characters 19-32\nCalled from Merlin_kernel__Phase_cache.With_cache.apply in file \"src/kernel/phase_cache.ml\" (inlined), lines 50-85, characters 12-1540\nCalled from Merlin_kernel__Mpipeline.process in file \"src/kernel/mpipeline.ml\", lines 330-331, characters 11-99\nCalled from CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.timed_lazy in file \"src/kernel/mpipeline.ml\", line 17, characters 11-23\nRe-raised at Merlin_kernel__Mpipeline.timed_lazy in file \"src/kernel/mpipeline.ml\", line 23, characters 7-22\nCalled from CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.process in file \"src/kernel/mpipeline.ml\", lines 350-355, characters 13-225\nCalled from CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.timed_lazy in file \"src/kernel/mpipeline.ml\", line 17, characters 11-23\nRe-raised at Merlin_kernel__Mpipeline.timed_lazy in file \"src/kernel/mpipeline.ml\", line 23, characters 7-22\nCalled from CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 63, characters 4-11\nCalled from Merlin_kernel__Mpipeline.process in file \"src/kernel/mpipeline.ml\", line 378, characters 13-48\nCalled from CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 56, characters 17-27\nRe-raised at CamlinternalLazy.do_force_block in file \"camlinternalLazy.ml\", line 63, characters 4-11\nCalled f...")
  merlin-call("complete-prefix" "-position" "16:38" "-prefix" "" "-doc" "n")
  merlin-complete("")
  merlin-completion-at-point()
  completion--capf-wrapper(merlin-completion-at-point optimist)
  company--capf-wrapper(merlin-completion-at-point optimist)
  company--capf-data-real()
  company--capf-data()
  company-capf--prefix()
  company-capf(prefix)
  apply(company-capf prefix)
  company-call-backend-raw(prefix)
  company--force-sync(company-call-backend-raw (prefix) company-capf)
  company-call-backend(prefix)
  company--begin-new()
  company--perform()
  company-auto-begin()
  company-idle-begin(#<buffer music_tui.ml> #<window 2003 on music_tui.ml> 14913 413)
  apply(company-idle-begin (#<buffer music_tui.ml> #<window 2003 on music_tui.ml> 14913 413))
  timer-event-handler([t 27052 9138 763301 nil company-idle-begin (#<buffer music_tui.ml> #<window 2003 on music_tui.ml> 14913 413) nil 593000 nil])

This issue just cropped up but previously I was seeing some exceptions from Merlin that unfortunately I didn't make note of, but they did not trigger the debugger, instead printing the exception in the minibuffer.

Editor: GNU Emacs 30.2 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.49, cairo version 1.18.2)
of 2025-08-17
OS: Fedora 43
OCaml compiler: 5.2.0+ox

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Unhandled

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions