aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hugo Herbelin <Hugo.Herbelin@inria.fr>2016-06-12 14:53:38 +0200
committerGravatar Hugo Herbelin <Hugo.Herbelin@inria.fr>2016-06-12 16:05:26 +0200
commit827663982e9cdf502f21727677515cf2318aa41d (patch)
tree2af3e1f54ad109183a2b58e7772e87e9f6eace5b
parent1f772656fa4bb6899ffea84ad5483e9690bbdc08 (diff)
Another fix to #4782 (a typing error not captured when dealing with bindings).
The tentative fix in f9695eb4b (which I was afraid it might be too strong, since it was implying failing more often) indeed broke other things (see #4813).
-rw-r--r--proofs/clenv.ml3
-rw-r--r--test-suite/bugs/closed/4782.v1
-rw-r--r--test-suite/bugs/closed/4813.v9
3 files changed, 12 insertions, 1 deletions
diff --git a/proofs/clenv.ml b/proofs/clenv.ml
index 09e77602d..79b331a27 100644
--- a/proofs/clenv.ml
+++ b/proofs/clenv.ml
@@ -459,7 +459,8 @@ let clenv_unify_binding_type clenv c t u =
let evd,c = w_coerce_to_type (cl_env clenv) clenv.evd c t u in
TypeProcessed, { clenv with evd = evd }, c
with
- | PretypeError (_,_,ActualTypeNotCoercible _) as e ->
+ | PretypeError (_,_,ActualTypeNotCoercible (_,_,
+ (NotClean _ | ConversionFailed _))) as e ->
raise e
| e when precatchable_exception e ->
TypeNotProcessed, clenv, c
diff --git a/test-suite/bugs/closed/4782.v b/test-suite/bugs/closed/4782.v
index 4622b18d2..ed4443786 100644
--- a/test-suite/bugs/closed/4782.v
+++ b/test-suite/bugs/closed/4782.v
@@ -6,3 +6,4 @@ Inductive p : Prop := consp : forall (e : r) (x : type e), cond e x -> p.
Goal p.
Fail apply consp with (fun _ : bool => mk_r unit (fun x => True)) nil.
+
diff --git a/test-suite/bugs/closed/4813.v b/test-suite/bugs/closed/4813.v
new file mode 100644
index 000000000..5f8ea74c1
--- /dev/null
+++ b/test-suite/bugs/closed/4813.v
@@ -0,0 +1,9 @@
+(* On the strength of "apply with" (see also #4782) *)
+
+Record ProverT := { Facts : Type }.
+Record ProverT_correct (P : ProverT) := { Valid : Facts P -> Prop ;
+ Valid_weaken : Valid = Valid }.
+Definition reflexivityValid (_ : unit) := True.
+Definition reflexivityProver_correct : ProverT_correct {| Facts := unit |}.
+Proof.
+ eapply Build_ProverT_correct with (Valid := reflexivityValid).