diff options
| -rw-r--r-- | tactics/evar_tactics.ml | 3 | ||||
| -rw-r--r-- | test-suite/success/ltac.v | 17 |
2 files changed, 19 insertions, 1 deletions
diff --git a/tactics/evar_tactics.ml b/tactics/evar_tactics.ml index f1faf00aca..97177ba342 100644 --- a/tactics/evar_tactics.ml +++ b/tactics/evar_tactics.ml @@ -51,7 +51,8 @@ let instantiate n (ist,rawc) ido gl = gl let let_evar name typ gls = - let sigma',evar = Evarutil.new_evar gls.sigma (pf_env gls) typ in + let src = (dummy_loc,GoalEvar) in + let sigma',evar = Evarutil.new_evar gls.sigma (pf_env gls) ~src typ in Refiner.tclTHEN (Refiner.tclEVARS sigma') (Tactics.letin_tac None name evar None nowhere) gls diff --git a/test-suite/success/ltac.v b/test-suite/success/ltac.v index 32c6d14311..a8d1ba7f5a 100644 --- a/test-suite/success/ltac.v +++ b/test-suite/success/ltac.v @@ -281,3 +281,20 @@ Goal forall x:nat, True. intro x. Fail clear x; f x. Abort. + +(* Do not consider evars as unification holes in Ltac matching (and at + least not as holes unrelated to the original evars) + [Example adapted from Ynot code] + *) + +Ltac not_eq e1 e2 := + match e1 with + | e2 => fail 1 + | _ => idtac + end. + +Goal True. +evar(foo:nat). +let evval := eval compute in foo in not_eq evval 1. +let evval := eval compute in foo in not_eq 1 evval. +Abort. |
