summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Yallop <yallop@gmail.com>2017-01-09 07:39:52 +0000
committerJeremy Yallop <yallop@gmail.com>2017-09-25 14:57:23 +0100
commite4158aba6871e8319e04c326fe2e09bcd3dcf33b (patch)
tree36a4f842f3673cb8caaef5c1ea174a7357df865c
parent570937a3cd9735edd19708309467b46d796d9be0 (diff)
downloadocaml-e4158aba6871e8319e04c326fe2e09bcd3dcf33b.tar.gz
let-rec check: module constraint is inspection.
-rw-r--r--testsuite/tests/letrec-disallowed/module_constraints.ml6
-rw-r--r--testsuite/tests/letrec-disallowed/module_constraints.ml.reference9
-rw-r--r--typing/typecore.ml2
3 files changed, 16 insertions, 1 deletions
diff --git a/testsuite/tests/letrec-disallowed/module_constraints.ml b/testsuite/tests/letrec-disallowed/module_constraints.ml
new file mode 100644
index 0000000000..faf81f234d
--- /dev/null
+++ b/testsuite/tests/letrec-disallowed/module_constraints.ml
@@ -0,0 +1,6 @@
+module type S = sig val y : float end;;
+module type T = sig val x : float val y : float end;;
+type t = T : (module S) -> t;;
+
+let rec x = let module M = (val m) in T (module M)
+and (m : (module T)) = (module (struct let x = 10.0 and y = 20.0 end));;
diff --git a/testsuite/tests/letrec-disallowed/module_constraints.ml.reference b/testsuite/tests/letrec-disallowed/module_constraints.ml.reference
new file mode 100644
index 0000000000..b1aec6fca0
--- /dev/null
+++ b/testsuite/tests/letrec-disallowed/module_constraints.ml.reference
@@ -0,0 +1,9 @@
+
+# module type S = sig val y : float end
+# module type T = sig val x : float val y : float end
+# type t = T : (module S) -> t
+# Characters 13-51:
+ let rec x = let module M = (val m) in T (module M)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Error: This kind of expression is not allowed as right-hand side of `let rec'
+#
diff --git a/typing/typecore.ml b/typing/typecore.ml
index 6195136951..6fd70d1696 100644
--- a/typing/typecore.ml
+++ b/typing/typecore.ml
@@ -2117,7 +2117,7 @@ struct
(inspect (modexp env f))
(inspect (modexp env p)))
| Tmod_constraint (m, _, _, _) ->
- modexp env m
+ Use.inspect (modexp env m)
| Tmod_unpack (e, _) ->
expression env e
and path : Env.env -> Path.t -> Use.t =