aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping/evarconv.ml
diff options
context:
space:
mode:
authorGravatar Matthieu Sozeau <mattam@mattam.org>2014-05-09 12:40:32 +0200
committerGravatar Matthieu Sozeau <mattam@mattam.org>2014-05-09 12:40:32 +0200
commit3ffbaec15938bd2dc92753ac3c1e2cc097811f50 (patch)
tree31592728e7a97744a7f53565ad6ee22a4a653ce2 /pretyping/evarconv.ml
parentb1c0584f24cb3732e1704a85452f4fe535e50f33 (diff)
Fix second-order matching to properly check that the predicate found by
abstraction has the right type. Fixes bug# 3306. Add test-suite files for bugs 3305 and 3306.
Diffstat (limited to 'pretyping/evarconv.ml')
-rw-r--r--pretyping/evarconv.ml10
1 files changed, 7 insertions, 3 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index a92698566..6bf621b05 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -889,10 +889,14 @@ let second_order_matching ts env_rhs evd (evk,args) argoccs rhs =
in
force_instantiation evd !evsref
| [] ->
- Evd.define evk rhs evd in
-
+ let evd =
+ try Evarsolve.check_evar_instance evd evk rhs (evar_conv_x ts)
+ with IllTypedInstance _ -> raise (TypingFailed evd)
+ in
+ Evd.define evk rhs evd
+ in
abstract_free_holes evd subst, true
- with TypingFailed evd -> Evd.define evk rhs evd, false
+ with TypingFailed evd -> evd, false
let second_order_matching_with_args ts env evd ev l t =
(*