From 82df2178109e7e000ae40b4eb7f5bf2d648879f7 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 18 Oct 2021 15:45:21 -0600 Subject: [PATCH] fix(menhir): sandbox infer rule Infer rules should not observe any modules not listed as dependencies. This can lead to "inconsistent assumptions" errors. Signed-off-by: Rudi Grinberg ps-id: A64A3962-362D-4FFF-9FFB-0E0A6702F5B3 --- CHANGES.md | 3 +++ src/dune_rules/compilation_context.ml | 2 ++ src/dune_rules/compilation_context.mli | 2 ++ src/dune_rules/menhir.ml | 5 ++++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index f1ea89907d7..bac43f35b1d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,9 @@ Unreleased ---------- +- Sandbox infer rules for menhir. Fixes possible "inconsistent assumptions" + errors (#5015, @rgrinberg) + - Experimental support for ctypes stubs (#3905, fixes #135, @mbacarella) - Fix interpretation of `binaries` defined in the `env stanza`. Binaries diff --git a/src/dune_rules/compilation_context.ml b/src/dune_rules/compilation_context.ml index eefcfb23be3..143632ad2d5 100644 --- a/src/dune_rules/compilation_context.ml +++ b/src/dune_rules/compilation_context.ml @@ -104,6 +104,8 @@ let js_of_ocaml t = t.js_of_ocaml let sandbox t = t.sandbox +let set_sandbox t sandbox = { t with sandbox } + let package t = t.package let vimpl t = t.vimpl diff --git a/src/dune_rules/compilation_context.mli b/src/dune_rules/compilation_context.mli index c27c919fe39..f2e22ac8667 100644 --- a/src/dune_rules/compilation_context.mli +++ b/src/dune_rules/compilation_context.mli @@ -79,6 +79,8 @@ val js_of_ocaml : t -> Dune_file.Js_of_ocaml.t option val sandbox : t -> Sandbox_config.t +val set_sandbox : t -> Sandbox_config.t -> t + val package : t -> Package.t option val vimpl : t -> Vimpl.t option diff --git a/src/dune_rules/menhir.ml b/src/dune_rules/menhir.ml index 91e86af08c7..19952e4f91c 100644 --- a/src/dune_rules/menhir.ml +++ b/src/dune_rules/menhir.ml @@ -204,7 +204,10 @@ module Run (P : PARAMS) = struct (Compilation_context.preprocessing cctx) name mock_module ~lint:false in - let cctx = Compilation_context.without_bin_annot cctx in + let cctx = + Compilation_context.set_sandbox cctx Sandbox_config.needs_sandboxing + |> Compilation_context.without_bin_annot + in let* deps = Dep_rules.for_module cctx mock_module in let* () = Module_compilation.ocamlc_i ~deps cctx mock_module