diff options
author | Hugo Herbelin <Hugo.Herbelin@inria.fr> | 2016-06-12 14:53:38 +0200 |
---|---|---|
committer | Hugo Herbelin <Hugo.Herbelin@inria.fr> | 2016-06-12 16:05:26 +0200 |
commit | 827663982e9cdf502f21727677515cf2318aa41d (patch) | |
tree | 2af3e1f54ad109183a2b58e7772e87e9f6eace5b | |
parent | 1f772656fa4bb6899ffea84ad5483e9690bbdc08 (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.ml | 3 | ||||
-rw-r--r-- | test-suite/bugs/closed/4782.v | 1 | ||||
-rw-r--r-- | test-suite/bugs/closed/4813.v | 9 |
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). |