diff options
| author | Maxime Dénès | 2019-09-02 14:23:46 +0200 |
|---|---|---|
| committer | Maxime Dénès | 2019-09-02 14:23:46 +0200 |
| commit | 61750abbc38dee8f9299b309979e0382d48ac323 (patch) | |
| tree | 404ee1c6c4ab6a5392c03360c3b69aef6b433052 | |
| parent | de164747a3296f693a2ac9bb11c1778b487a50c4 (diff) | |
| parent | 970404f2bfa7a26ad64692844441261cebd80082 (diff) | |
Merge PR #10648: [extraction] Fix #7191: Avoid unsound eta-reduction
Reviewed-by: maximedenes
| -rw-r--r-- | plugins/extraction/mlutil.ml | 4 | ||||
| -rw-r--r-- | test-suite/output/bug7191.out | 9 | ||||
| -rw-r--r-- | test-suite/output/bug7191.v | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/plugins/extraction/mlutil.ml b/plugins/extraction/mlutil.ml index 2d5872718f..c57daf0047 100644 --- a/plugins/extraction/mlutil.ml +++ b/plugins/extraction/mlutil.ml @@ -779,7 +779,7 @@ let eta_red e = else e | _ -> e -(* Performs an eta-reduction when the core is atomic, +(* Performs an eta-reduction when the core is atomic and value, or otherwise returns None *) let atomic_eta_red e = @@ -789,7 +789,7 @@ let atomic_eta_red e = | MLapp (f,a) when test_eta_args_lift 0 n a -> (match f with | MLrel k when k>n -> Some (MLrel (k-n)) - | MLglob _ | MLexn _ | MLdummy _ -> Some f + | MLglob _ | MLdummy _ -> Some f | _ -> None) | _ -> None diff --git a/test-suite/output/bug7191.out b/test-suite/output/bug7191.out new file mode 100644 index 0000000000..005455e30c --- /dev/null +++ b/test-suite/output/bug7191.out @@ -0,0 +1,9 @@ + +type unit0 = +| Tt + +(** val f : unit0 -> unit0 **) + +let f _ = + assert false (* absurd case *) + diff --git a/test-suite/output/bug7191.v b/test-suite/output/bug7191.v new file mode 100644 index 0000000000..1aa4625b6c --- /dev/null +++ b/test-suite/output/bug7191.v @@ -0,0 +1,3 @@ +Require Extraction. +Definition f (x : False) : unit -> unit := match x with end. +Recursive Extraction f. |
