aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Jesus Gallego Arias2020-05-15 17:42:05 +0200
committerEmilio Jesus Gallego Arias2020-05-15 17:42:05 +0200
commit03e0aa5ee57b3b539b0fa34be2e1a02a2803b0be (patch)
treee04fb1b65154093795bebb7f590e32785c53abd6
parent215990f9f2a23d406e8e886c9824a56a120d8347 (diff)
parent6b793e6b39b60cef8c3163cb6cd240e5a0ecbfc5 (diff)
Merge PR #12323: Fixes #12322: anomaly when printing "fun" binders with implicit types
Reviewed-by: ejgallego
-rw-r--r--doc/changelog/02-specification-language/12323-master+fix12322-anomaly-implicit-binder-factorization.rst4
-rw-r--r--interp/constrextern.ml2
-rw-r--r--test-suite/output/ImplicitTypes.out6
-rw-r--r--test-suite/output/ImplicitTypes.v3
4 files changed, 14 insertions, 1 deletions
diff --git a/doc/changelog/02-specification-language/12323-master+fix12322-anomaly-implicit-binder-factorization.rst b/doc/changelog/02-specification-language/12323-master+fix12322-anomaly-implicit-binder-factorization.rst
new file mode 100644
index 0000000000..e5ec865b15
--- /dev/null
+++ b/doc/changelog/02-specification-language/12323-master+fix12322-anomaly-implicit-binder-factorization.rst
@@ -0,0 +1,4 @@
+- **Fixed:**
+ Anomaly possibly raised when printing binders with implicit types
+ (`#12323 <https://github.com/coq/coq/pull/12323>`_,
+ by Hugo Herbelin; fixes `#12322 <https://github.com/coq/coq/pull/12322>`_).
diff --git a/interp/constrextern.ml b/interp/constrextern.ml
index 3f7bb6e330..8097935ec2 100644
--- a/interp/constrextern.ml
+++ b/interp/constrextern.ml
@@ -836,7 +836,7 @@ let rec flatten_application c = match DAst.get c with
let same_binder_type ty nal c =
match nal, DAst.get c with
- | _::_, GProd (_,_,ty',_) -> glob_constr_eq ty ty'
+ | _::_, (GProd (_,_,ty',_) | GLambda (_,_,ty',_)) -> glob_constr_eq ty ty'
| [], _ -> true
| _ -> assert false
diff --git a/test-suite/output/ImplicitTypes.out b/test-suite/output/ImplicitTypes.out
index 824c260e92..42cb2309e0 100644
--- a/test-suite/output/ImplicitTypes.out
+++ b/test-suite/output/ImplicitTypes.out
@@ -14,6 +14,12 @@ forall b1 b2, b1 = b2
: Prop
fun b => b = b
: bool -> Prop
+fun b c : bool => b = c
+ : bool -> bool -> Prop
+fun c b : bool => b = c
+ : bool -> bool -> Prop
+fun b1 b2 => b1 = b2
+ : bool -> bool -> Prop
fix f b (n : nat) {struct n} : bool :=
match n with
| 0 => b
diff --git a/test-suite/output/ImplicitTypes.v b/test-suite/output/ImplicitTypes.v
index dbc83f9229..205c6a67bf 100644
--- a/test-suite/output/ImplicitTypes.v
+++ b/test-suite/output/ImplicitTypes.v
@@ -23,6 +23,9 @@ Check forall b1 b2, b1 = b2.
(* Check in "fun" *)
Check fun b => b = b.
+Check fun b c => b = c.
+Check fun c b => b = c.
+Check fun b1 b2 => b1 = b2.
(* Check in binders *)
Check fix f b n := match n with 0 => b | S p => f b p end.