ocaml / ocaml/odoc

odoc crashes when processing comments enriched with ocaml-rpc ppx

Open
#402 1 comment 1 reaction 1 assignee View on GitHub

@aantron is already working on this.

Since Dec 5, 2019.

bug parser
Dominant language
OCaml
Stars
355
Forks
114
Avg merge
6d 21h
Merged PRs (30d)
10

Description

I'm trying to generate docs for all the xs-opam packages using odig but odoc spectacularly crashes when processing rpc-enhanced comments in xapi-idl, xapi-storage, and xapi-xenopsd.

Example:

$ odig doc
Updating documentation, this may take some time...
[FAILED][spawn:22191]
 Illegal exit status: exited [2] expected: 0
 cmd: ['/home/paus/.local/share/opam/toolstack/bin/odoc' 'compile' '--pkg' 'xapi-idl' '-o' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/varstore/privileged/varstore_privileged_interface.odoc' '/home/paus/.local/share/opam/toolstack/lib/xapi-idl/varstore/privileged/varstore_privileged_interface.cmt' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/result/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rpclib/core/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rresult/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/uuidm/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/']
 env: 
 relevant-env: 
 cwd: '/home/paus/code/toolstack/xcp-idl'
 success-exits: 0
 stdin: <none>
 stdout: <ui>
 stderr: <ui>
 stdo-ui: odoc: internal error, uncaught exception:
      File "src/loader/doc_attr.ml", line 71, characters 29-35: Assertion failed
      Raised at file "src/loader/doc_attr.ml", line 71, characters 29-41
      Called from file "src/loader/doc_attr.ml", line 80, characters 4-32
      Called from file "src/loader/cmti.ml", line 255, characters 12-59
      Called from file "src/loader/cmti.ml", line 269, characters 20-57
      Called from file "list.ml", line 117, characters 24-34
      Called from file "src/loader/cmti.ml", line 264, characters 4-383
      Called from file "src/loader/cmt.ml", line 515, characters 25-62
      Called from file "list.ml", line 117, characters 24-34
      Called from file "src/loader/cmt.ml", line 513, characters 4-136
      Called from file "src/loader/cmt.ml", line 359, characters 38-69
      Called from file "src/loader/cmt.ml", line 376, characters 16-70
      Called from file "src/loader/cmt.ml", line 409, characters 22-70
      Called from file "src/loader/cmt.ml", line 469, characters 27-60
      Called from file "src/loader/cmt.ml", line 515, characters 25-62
      Called from file "list.ml", line 117, characters 24-34
      Called from file "src/loader/cmt.ml", line 513, characters 4-136
      Called from file "src/loader/cmt.ml", line 522, characters 14-46
      Called from file "src/loader/odoc_loader.ml", line 137, characters 31-69
      Called from file "src/model/error.ml", line 65, characters 9-15
      Called from file "src/odoc/compile.ml", line 23, characters 8-36
      Called from file "cmdliner_term.ml", line 25, characters 19-24
      Called from file "cmdliner.ml", line 117, characters 32-39

 result: exited [2]
 writes: {'/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/varstore/privileged/varstore_privileged_interface.odoc'}
 reads: {'/home/paus/.local/share/opam/toolstack/lib/xapi-idl/varstore/privileged/varstore_privileged_interface.cmt'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/camlinternalFormatBasics.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rpclib/core/idl.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/result/result.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rpclib/core/rpc.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rresult/rresult.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__arg.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__bigarray.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__buffer.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__complex.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__format.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__int32.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__int64.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__nativeint.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__printexc.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__printf.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__random.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__seq.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__string.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/stdlib__uchar.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/syslog.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/unix.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/uuidm/uuidm.odoc'
         '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/xcp_service.odoc'}
 created: 23.7s (23646028022ns)
 start: 23.7s (23665400912ns)
 duration: 12.8ms (12715397ns)
 hash: adfb5b3ffdfe71a6
 kind: spawn
[ABORTED][spawn:22197] ['/home/paus/.local/share/opam/toolstack/bin/odoc' 'compile' '--pkg' 'xapi-idl' '-o' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/varstore/privileged/varstore_privileged_client.odoc' '/home/paus/.local/share/opam/toolstack/lib/xapi-idl/varstore/privileged/varstore_privileged_client.cmt' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/base/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/base/caml/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/base/shadow_stdlib/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/cohttp/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/fieldslib/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/message-switch-core/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/message-switch-unix/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ocaml/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/ppx_sexp_conv/runtime-lib/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/re/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/result/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rpclib/core/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rpclib/json/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rpclib/xml/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/rresult/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/sexplib0/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/uri/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/uuidm/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-backtrace/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-idl/varstore/privileged/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xapi-stdext-pervasives/' '-I' '/home/paus/.local/share/opam/toolstack/var/cache/odig/odoc/xmlm/']

I've noticed that the code where odoc crashes is similar to code existing in ppx/common but I'm still very unfamiliar with preprocessors and comments.

The crash happens on a branched marked as todo: https://github.com/ocaml/odoc/blob/master/src/loader/doc_attr.ml#L71

See https://github.com/mirage/ocaml-rpc/issues/139

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.