aboutsummaryrefslogtreecommitdiff
path: root/kernel/cinstr.mli
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2018-05-28 20:11:06 +0200
committerPierre-Marie Pédrot2018-05-28 20:11:06 +0200
commita205bb9f2a93396aad154ec50f6f122cbd46811c (patch)
treecd1ad9834fa9e6391193b377cc4533f9eba702c5 /kernel/cinstr.mli
parent81535edc4b21015bd63d23e57ca9d707b4b71f6b (diff)
parent131ac2af3778a741f5f33e212ef4a57f7a91d20a (diff)
Merge PR #7521: Fix soundness bug with VM/native and cofixpoints
Diffstat (limited to 'kernel/cinstr.mli')
-rw-r--r--kernel/cinstr.mli6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/cinstr.mli b/kernel/cinstr.mli
index 4a3c03d85e..f42c46175c 100644
--- a/kernel/cinstr.mli
+++ b/kernel/cinstr.mli
@@ -31,7 +31,7 @@ and lambda =
| Lprim of pconstant * int (* arity *) * instruction * lambda array
| Lcase of case_info * reloc_table * lambda * lambda * lam_branches
| Lfix of (int array * int) * fix_decl
- | Lcofix of int * fix_decl
+ | Lcofix of int * fix_decl (* must be in eta-expanded form *)
| Lmakeblock of int * lambda array
| Lval of structured_constant
| Lsort of Sorts.t
@@ -39,6 +39,10 @@ and lambda =
| Lproj of int * Constant.t * lambda
| Luint of uint
+(* Cofixpoints have to be in eta-expanded form for their call-by-need evaluation
+to be correct. Otherwise, memoization of previous evaluations will be applied
+again to extra arguments (see #7333). *)
+
and lam_branches =
{ constant_branches : lambda array;
nonconstant_branches : (Name.t array * lambda) array }