aboutsummaryrefslogtreecommitdiff
path: root/interp/constrintern.ml
diff options
context:
space:
mode:
authorGaëtan Gilbert2020-11-12 14:36:02 +0100
committerGaëtan Gilbert2020-11-16 14:28:22 +0100
commitf6a8c2542a5ce85a91caf9b1745c980c2164707a (patch)
tree0aa3929d8cf431bb5ff82e6161759a9f110a95c6 /interp/constrintern.ml
parent89a4b7e7dd82bd46db2d00b6e48b8989d3a5372b (diff)
Fix incorrect name refreshing when interning a generalized binder
Fix #13249
Diffstat (limited to 'interp/constrintern.ml')
-rw-r--r--interp/constrintern.ml22
1 files changed, 13 insertions, 9 deletions
diff --git a/interp/constrintern.ml b/interp/constrintern.ml
index 02c3c047d5..c4b5bf8984 100644
--- a/interp/constrintern.ml
+++ b/interp/constrintern.ml
@@ -534,15 +534,19 @@ let intern_generalized_binder intern_type ntnvars
in
let na = match na with
| Anonymous ->
- let name =
- let id =
- match ty with
- | { v = CApp ((_, { v = CRef (qid,_) } ), _) } when qualid_is_ident qid ->
- qualid_basename qid
- | _ -> default_non_dependent_ident
- in Implicit_quantifiers.make_fresh ids' (Global.env ()) id
- in Name name
- | _ -> na in
+ let id =
+ match ty with
+ | { v = CApp ((_, { v = CRef (qid,_) } ), _) } when qualid_is_ident qid ->
+ qualid_basename qid
+ | _ -> default_non_dependent_ident
+ in
+ let ids' = List.fold_left (fun ids' lid -> Id.Set.add lid.CAst.v ids') ids' fvs in
+ let id =
+ Implicit_quantifiers.make_fresh ids' (Global.env ()) id
+ in
+ Name id
+ | _ -> na
+ in
let impls = impls_type_list 1 ty' in
(push_name_env ntnvars impls env' (make ?loc na),
(make ?loc (na,b',ty')) :: List.rev bl)