Skip to content

Merlin enters debugger repeatedly (OxCaml) #2045

@bhlieberman

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
    No fields configured for issues without a type.

    Projects

    Status
    Unhandled

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions