aboutsummaryrefslogtreecommitdiff
path: root/pretyping
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2014-02-03 19:38:26 +0100
committerPierre-Marie Pédrot2014-02-03 21:29:02 +0100
commitec4ce9efc02d0f908a7f54ca47520703673e74c4 (patch)
tree598541a7ddf2442a5c6b455326d4c344b6da56ef /pretyping
parent3ad26e3de5780b84b2723d44d52094bab6b23786 (diff)
Tracking memory misallocation by trying to improve sharing.
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/evarutil.ml7
1 files changed, 4 insertions, 3 deletions
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml
index 93d9552c0d..264172d0c9 100644
--- a/pretyping/evarutil.ml
+++ b/pretyping/evarutil.ml
@@ -487,10 +487,11 @@ let clear_hyps_in_evi evdref hyps concl ids =
let nconcl =
check_and_clear_in_constr evdref (OccurHypInSimpleClause None) ids concl in
let nhyps =
- let check_context (id,ob,c) =
+ let check_context ((id,ob,c) as decl) =
let err = OccurHypInSimpleClause (Some id) in
- (id, Option.map (check_and_clear_in_constr evdref err ids) ob,
- check_and_clear_in_constr evdref err ids c)
+ let ob' = Option.smartmap (fun c -> check_and_clear_in_constr evdref err ids c) ob in
+ let c' = check_and_clear_in_constr evdref err ids c in
+ if ob == ob' && c == c' then decl else (id, ob', c')
in
let check_value vk =
match !vk with