summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--typing/ctype.ml9
1 files changed, 8 insertions, 1 deletions
diff --git a/typing/ctype.ml b/typing/ctype.ml
index 28eb6d752..85c6cd9f7 100644
--- a/typing/ctype.ml
+++ b/typing/ctype.ml
@@ -1321,6 +1321,13 @@ and unify_row env row1 row2 =
in
let empty fields =
List.for_all (fun (_,f) -> row_field_repr f = Rabsent) fields in
+ if (row1.row_closed || row2.row_closed)
+ && (empty r1 || row2.row_closed) && (empty r2 || row1.row_closed)
+ && List.for_all
+ (fun (_,f1,f2) ->
+ row_field_repr f1 = Rabsent || row_field_repr f2 = Rabsent)
+ pairs
+ then raise (Unify []);
let name =
if row1.row_name <> None && (row1.row_closed || empty r2) &&
(not row2.row_closed || keep (fun f1 f2 -> f1, f2) && empty r1)
@@ -1348,7 +1355,7 @@ and unify_row env row1 row2 =
begin try
rm1.desc <- Tlink (more row1 r2);
rm2.desc <- Tlink (more row2 r1);
- List.iter (fun (l,f1,f2) -> unify_row_field env f1 f2) pairs
+ List.iter (fun (l,f1,f2) -> unify_row_field env f1 f2) pairs
with exn ->
rm1.desc <- md1; rm2.desc <- md2; raise exn
end