From b9312affa20dfd82bfd27129c291df40730be1c2 Mon Sep 17 00:00:00 2001 From: Thomas Refis Date: Mon, 6 Aug 2018 18:32:29 +0100 Subject: [PATCH] generalize_expansive: test that we treat missing types as abstract types --- testsuite/tests/typing-missing-cmi-2/bar.mli | 1 + testsuite/tests/typing-missing-cmi-2/baz.ml | 1 + testsuite/tests/typing-missing-cmi-2/foo.mli | 1 + testsuite/tests/typing-missing-cmi-2/ocamltests | 1 + .../typing-missing-cmi-2/test.compilers.reference | 1 + testsuite/tests/typing-missing-cmi-2/test.ml | 15 +++++++++++++++ typing/ctype.ml | 5 ++++- 7 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 testsuite/tests/typing-missing-cmi-2/bar.mli create mode 100644 testsuite/tests/typing-missing-cmi-2/baz.ml create mode 100644 testsuite/tests/typing-missing-cmi-2/foo.mli create mode 100644 testsuite/tests/typing-missing-cmi-2/ocamltests create mode 100644 testsuite/tests/typing-missing-cmi-2/test.compilers.reference create mode 100644 testsuite/tests/typing-missing-cmi-2/test.ml diff --git a/testsuite/tests/typing-missing-cmi-2/bar.mli b/testsuite/tests/typing-missing-cmi-2/bar.mli new file mode 100644 index 000000000..752ac028f --- /dev/null +++ b/testsuite/tests/typing-missing-cmi-2/bar.mli @@ -0,0 +1 @@ +val foo : unit -> 'a Foo.t diff --git a/testsuite/tests/typing-missing-cmi-2/baz.ml b/testsuite/tests/typing-missing-cmi-2/baz.ml new file mode 100644 index 000000000..2dd4482aa --- /dev/null +++ b/testsuite/tests/typing-missing-cmi-2/baz.ml @@ -0,0 +1 @@ +let x = Bar.foo () diff --git a/testsuite/tests/typing-missing-cmi-2/foo.mli b/testsuite/tests/typing-missing-cmi-2/foo.mli new file mode 100644 index 000000000..cbc4635f6 --- /dev/null +++ b/testsuite/tests/typing-missing-cmi-2/foo.mli @@ -0,0 +1 @@ +type 'a t diff --git a/testsuite/tests/typing-missing-cmi-2/ocamltests b/testsuite/tests/typing-missing-cmi-2/ocamltests new file mode 100644 index 000000000..31c13b443 --- /dev/null +++ b/testsuite/tests/typing-missing-cmi-2/ocamltests @@ -0,0 +1 @@ +test.ml diff --git a/testsuite/tests/typing-missing-cmi-2/test.compilers.reference b/testsuite/tests/typing-missing-cmi-2/test.compilers.reference new file mode 100644 index 000000000..0927ee4b0 --- /dev/null +++ b/testsuite/tests/typing-missing-cmi-2/test.compilers.reference @@ -0,0 +1 @@ +val x : '_weak1 Foo.t diff --git a/testsuite/tests/typing-missing-cmi-2/test.ml b/testsuite/tests/typing-missing-cmi-2/test.ml new file mode 100644 index 000000000..2ef1c6d38 --- /dev/null +++ b/testsuite/tests/typing-missing-cmi-2/test.ml @@ -0,0 +1,15 @@ +(* TEST +files = "foo.mli bar.mli baz.ml" +* setup-ocamlc.byte-build-env +** ocamlc.byte +module = "foo.mli" +*** ocamlc.byte +module = "bar.mli" +**** script +script = "rm foo.cmi" +***** ocamlc.byte +flags = "-c -i" +module = "baz.ml" +ocamlc_byte_exit_status = "0" +****** check-ocamlc.byte-output +*) diff --git a/typing/ctype.ml b/typing/ctype.ml index 097d63ed2..dacbacae5 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -795,7 +795,10 @@ let rec generalize_expansive env var_level visited ty = Tconstr (path, tyl, abbrev) -> let variance = try (Env.find_type path env).type_variance - with Not_found -> List.map (fun _ -> Variance.may_inv) tyl in + with Not_found -> + (* See testsuite/tests/typing-missing-cmi-2 for an example *) + List.map (fun _ -> Variance.may_inv) tyl + in abbrev := Mnil; List.iter2 (fun v t ->