aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--engine/uState.ml3
-rw-r--r--test-suite/success/polymorphism.v13
2 files changed, 16 insertions, 0 deletions
diff --git a/engine/uState.ml b/engine/uState.ml
index 282acb3d6..ff91493ee 100644
--- a/engine/uState.ml
+++ b/engine/uState.ml
@@ -315,6 +315,9 @@ let check_univ_decl uctx decl =
ctx
let restrict ctx vars =
+ let vars = Names.Id.Map.fold (fun na l vars -> Univ.LSet.add l vars)
+ (fst ctx.uctx_names) vars
+ in
let uctx' = Univops.restrict_universe_context ctx.uctx_local vars in
{ ctx with uctx_local = uctx' }
diff --git a/test-suite/success/polymorphism.v b/test-suite/success/polymorphism.v
index 00cab744e..930c16517 100644
--- a/test-suite/success/polymorphism.v
+++ b/test-suite/success/polymorphism.v
@@ -401,6 +401,19 @@ Module Anonymous.
End Anonymous.
+Module Restrict.
+ (* Universes which don't appear in the term should be pruned, unless they have names *)
+ Set Universe Polymorphism.
+
+ Definition dummy_pruned@{} : nat := ltac:(let x := constr:(Type) in exact 0).
+
+ Definition named_not_pruned@{u} : nat := 0.
+ Check named_not_pruned@{_}.
+
+ Definition named_not_pruned_nonstrict : nat := ltac:(let x := constr:(Type@{u}) in exact 0).
+ Check named_not_pruned_nonstrict@{_}.
+End Restrict.
+
Module F.
Context {A B : Type}.
Definition foo : Type := B.